tx · CPrDm4obDHeYaAhoYQV7sKzGXtLmw8BGVVwLz4Dpga33 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep: -0.03900000 Waves 2023.06.21 17:47 [2632547] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves
{ "type": 13, "id": "CPrDm4obDHeYaAhoYQV7sKzGXtLmw8BGVVwLz4Dpga33", "fee": 3900000, "feeAssetId": null, "timestamp": 1687358914620, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "5tWRukYrfdrP1BJ7uHUJ9SVk1Mkq8RKSLT44dLtmz3pBTK4kRkFN64aKq5wjgz3e8pUKQH9RT4xPktWenR1wEdW2" ], "script": "base64:BgI7CAISBAoCCBgSAwoBCBIECgIRERIECgIRERIDCgEREgQKAgEBEgQKAggIEgUKAwgICBIDCgEREgMKAQiHAQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ3AICt4gQABU1VTFQ4AIDC1y8ABk1VTFQxMACAyK+gJQAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIADUVTTUFYUEFDS0FHRVMAAwAJRVNCVVlDT0VGAAQACkVTU0VMTENPRUYACgAFTUFYSFAAZAAIcmVzVHlwZXMJAMwIAgIDT2lsCQDMCAICA09yZQkAzAgCAgRXb29kCQDMCAICBFNhbmQJAMwIAgIEQ2xheQkAzAgCAgdPcmdhbmljBQNuaWwACG1hdFR5cGVzCQDMCAICBEZ1ZWwJAMwIAgIFTWV0YWwJAMwIAgIFUGxhbmsJAMwIAgIFR2xhc3MJAMwIAgIHUGxhc3RpYwkAzAgCAgdQcm90ZWluBQNuaWwACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgISMV8xXzFfMl8yXzVfMV8xMF8wCQDMCAICEzJfMl8yXzRfNF8xMF8xXzEwXzAJAMwIAgITM18zXzNfNl82XzE1XzFfMTBfMAkAzAgCAhMyXzVfNV8yXzdfNV8yXzEwMF8xCQDMCAICFzRfMTBfMTBfNF8xNF8xMF8yXzEwMF8xCQDMCAICFzZfMTVfMTVfNl8yMV8xNV8yXzEwMF8xCQDMCAICEjFfMV8xXzFfMV84XzFfMTBfMgkAzAgCAhMyXzJfMl8yXzJfMTZfMV8xMF8yCQDMCAICEzNfM18zXzNfM18yNF8xXzEwXzIJAMwIAgITOV85XzFfNV81XzFfNV8xMDBfMwkAzAgCAhcxOF8xOF8yXzEwXzEwXzJfNV8xMDBfMwkAzAgCAhcyN18yN18zXzE1XzE1XzNfNV8xMDBfMwkAzAgCAhIyXzJfMV8yXzJfMl8xXzEwXzQJAMwIAgISNF80XzJfNF80XzRfMV8xMF80CQDMCAICEjZfNl8zXzZfNl82XzFfMTBfNAUDbmlsAA9jb250SWR4QW1lcmljYXMAAAANY29udElkeEV1cm9wZQABAAtjb250SWR4QXNpYQACAA1jb250SWR4QWZyaWNhAAMADmNvbnRJZHhPY2VhbmlhAAQADXJlY2lwZUlkeEZ1ZWwAAAAOcmVjaXBlSWR4TWV0YWwAAQAOcmVjaXBlSWR4UGxhbmsAAgAOcmVjaXBlSWR4R2xhc3MAAwAQcmVjaXBlSWR4UGxhc3RpYwAEABByZWNpcGVJZHhQcm90ZWluAAUAD3JlY2lwZUlkeFdlaWdodAAGABFyZWNpcGVJZHhQYWNrc2l6ZQAHABJyZWNpcGVJZHhDb250aW5lbnQACAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAQpnZXRQa2dTaXplAQdwcm9kSWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFB3Byb2RJZHgCAV8FEXJlY2lwZUlkeFBhY2tzaXplAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEMZ2V0SW50T3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhsYW5kQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAg1sYW5kQXJ0U3RhdHVzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgp3YXJlSG91c2VfBQtsYW5kQXNzZXRJZAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQlhc0FueUxpc3QBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAFsBQckbWF0Y2gwBQFsCQACAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQlhc0Jvb2xlYW4BAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBcwUHJG1hdGNoMAUBcwkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUAC0lkeEVmZlRvdGFsAAAACklkeEVmZlVzZXIAAQEOZ2V0Vm90aW5nUG93ZXIBEnVzZXJBZGRyU3RyT3JFbXB0eQQFcHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCgEFYWRkZXICA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0ECnRvdGFsUG93ZXIKAAIkbAUFcHJvcHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAp1c2Vyc1Bvd2VyAwkAAAIFEnVzZXJBZGRyU3RyT3JFbXB0eQIAAAAECGxhbmRzU3RyCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFEnVzZXJBZGRyU3RyT3JFbXB0eQQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJ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QUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlAApNSU5QQVlNRU5UAJBOAA5TRUxMTVVMVElQTElFUgDIAQANQlVZTVVMVElQTElFUgCsAgAKQVVDVElPTkZFRQCQTgAOTUlOU0hPUFBBWU1FTlQAoI0GAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAAlvcmRJZHhSZXMAAAAJb3JkSWR4TWF0AAEACm9yZElkeFByb2QAAgEIZ2V0T3JkZXIBBm9yZEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBm9yZEtleQIwMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6MEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6AgE6CQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4UmVzAhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeE1hdAIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgkAkQMCBQFwBQpvcmRJZHhQcm9kBQNuaWwBCHRvVm9sdW1lAwZhbW91bnQHcGtnU2l6ZQlpc1Byb2R1Y3QDBQlpc1Byb2R1Y3QEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAUGYW1vdW50AQxzZWxsSW50ZXJuYWwEBWxvY0lkB3Jlc1R5cGUGYW1vdW50CG1pblByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdyZXNUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJyMAMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQAAAwkAZgIJAGQCBQJ3MAUGYW1vdW50BRNGQUNUT1JZTUFYV0FSRUhPVVNFCQBlAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUCdzAFBmFtb3VudAQMdXNkdFJlY2VpdmVkCQBkAgkAawMFAnIwCQBlAgkAaAIFDlNFTExNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZAIJAGgCAGQFAncwCQBoAgAyBQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwkAZQIFBmFtb3VudAUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAVtaW45OQkAZQIFCG1pblByaWNlCQBpAgUIbWluUHJpY2UAZAMJAGYCCQBoAgUFbWluOTkFBmFtb3VudAkAaAIFDHVzZHRSZWNlaXZlZAUFTVVMVDgJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQx1c2R0UmVjZWl2ZWQCAyAvIAkApAMBBQZhbW91bnQCDiA8IG1pblByaWNlID0gCQCkAwEFCG1pblByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhyZXNUeXBlcwUHcmVzVHlwZQIBKQkAlAoCCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGQCBQJ3MAUGYW1vdW50BQx1c2R0UmVjZWl2ZWQBC2J1eUludGVybmFsBAVsb2NJZAdtYXRUeXBlBmFtb3VudAhtYXhQcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHbWF0VHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCbTEDCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAJcDAQkAzAgCBQZhbW91bnQJAMwIAgkAZQIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQNuaWwAAAQCbTAJAJcDAQkAzAgCBQJ3MAkAzAgCCQBlAgUGYW1vdW50BQJtMQUDbmlsBAFtCQBkAgUCbTAFAm0xBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQJ3MAkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEJc2V0Q29tbW9uAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQGaXNQcm9kCAUDYWNjAl84BAdwa2dTaXplAwUGaXNQcm9kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFAWoCAV8FEXJlY2lwZUlkeFBhY2tzaXplAAAECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FB3BrZ1NpemUFBmlzUHJvZAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfNgUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzYFAWoAAAQLY3VyT3JkUGFydHMJALUJAgMJAGYCCQCQAwEIBQNhY2MCXzcFAWoJAJEDAggFA2FjYwJfNwUBagIDMEAwAgFABAhjdXJPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAAECGN1ck9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAQMDCQBmAgAABQhjdXJPcmRQcgYJAGYCAAAFCG5ld09yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECWN1ck9yZFVzZAkAawMFCGN1ck9yZEFtBQhjdXJPcmRQcgUFTVVMVDgECWN1ck9yZFZvbAkBCHRvVm9sdW1lAwUIY3VyT3JkQW0FB3BrZ1NpemUFBmlzUHJvZAMJAAACBQhuZXdPcmRBbQAAAwkAZgIFCGN1ck9yZEFtAAAJAJoKCAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAgFA2FjYwJfMwgFA2FjYwJfNAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQCaCggJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQgFA2FjYwJfMwgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kAwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sCAUDYWNjAl80CQBlAgkAZAIIBQNhY2MCXzUFCW5ld09yZFVzZAUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QDCQBmAgAABQhjdXJPcmRBbQQGYW1EaWZmCQBlAgUIY3VyT3JkQW0FCG5ld09yZEFtAwkAZgIAAAkAZQIFBndoSW5pdAUGYW1EaWZmCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEFBmFtRGlmZgIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCaCggJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQZhbURpZmYIBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wIBQNhY2MCXzUIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAMJAGYCAAAJAGQCBQZ3aEluaXQFCG5ld09yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUIbmV3T3JkQW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFBndoSW5pdAUIbmV3T3JkQW0IBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAELc2V0SW50ZXJuYWwDCWN1cnJlbnRXaApjdXJyZW50T3JkBm5ld09yZAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA1jdXJyZW50T3JkUmVzCQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4UmVzAgFfBA1jdXJyZW50T3JkTWF0CQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4TWF0AgFfBA5jdXJyZW50T3JkUHJvZAMJAAACCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIBXwMJAQIhPQIJAJADAQUGbmV3T3JkAAMJAAIBAjNuZXdPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUGbmV3T3JkAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUGbmV3T3JkAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFBm5ld09yZAACAgAFA25pbAkAtQkCCQCRAwIFBm5ld09yZAACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3Vy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IT0CCQCQAwEFCmJwT3JkUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UEB2JwT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicE9yZFBhcnRzAAAEB2JwT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicE9yZFBhcnRzAAEDCQBmAgAABQdicE9yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECGJwT3JkVXNkCQBrAwUHYnBPcmRBbQUHYnBPcmRQcgUFTVVMVDgEBmJwSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzgFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl84BQFqAAAEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzkFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl85BQFqAAAECXdoT3JkSW5pdAMJAGYCCQCQAwEIBQNhY2MDXzEwBQFqCQCRAwIIBQNhY2MDXzEwBQFqAgMwQDAECndoT3JkUGFydHMJALUJAgUJd2hPcmRJbml0AgFABAd3aE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwAABAd3aE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwABAwMJAQIhPQIFB2JwT3JkQW0AAAkBAiE9AgUHYnBPcmRQcgUHd2hPcmRQcgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIKUHJpY2VzIG9mIAkAkQMCCAUDYWNjA18xMQUBagIXIGRvbid0IG1hdGNoISBXSCBwcmljZT0JAKQDAQUHd2hPcmRQcgINLCB5b3VyIHByaWNlPQkApAMBBQdicE9yZFByBAh3aE9yZFVzZAkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUHcGtnU2l6ZQUGaXNQcm9kAwkAAAIFB2JwT3JkQW0AAAkAngoMCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIFCXdoT3JkSW5pdAkAzQgCCAUDYWNjAl8zCQCkAwEFBmJwSW5pdAgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QDCQBmAgUHYnBPcmRBbQAAAwkAZgIAAAUHd2hPcmRBbQMJAGYCBQdicE9yZEFtCQEBLQEFB3doT3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCkAwEFB2JwT3JkQW0CBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoCGywgYnV0IHdhcmVob3VzZSBvbmx5IHNlbGxzIAkApAMBCQEBLQEFB3doT3JkQW0JAJ4KDAkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFBmJwSW5pdAUHYnBPcmRBbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sCAUDYWNjAl81CQBkAggFA2FjYwJfNgUIYnBPcmRVc2QJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCeCgwJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAAIBCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkAkQMCCAUDYWNjA18xMQUBagIfIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IGJ1eSBpdAoBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBWxvY0lkCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFBWxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWluUHJpY2VzBQFqCQCVCgMJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAJEDAgUHYW1vdW50cwUBagkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdyZXNMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAkAlAoCCQDNCAIIBQZtZXJnZWQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxidXlNYXRlcmlhbHMCB2Ftb3VudHMJbWF4UHJpY2VzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCG1VcGRhdGVyAgNhY2MBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJFlvdSB0cmllZCB0byBidXkgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhtYXRUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQELYnV5SW50ZXJuYWwEBQVsb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1heFByaWNlcwUBagkAlQoDCQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqCAUBYgJfMwkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhtVXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCCAUGbWVyZ2VkAl8zAGQJAJQKAgkAzQgCCQDOCAIIBQZtZXJnZWQCXzEFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAQlleGNoYW5nZXICA2FjYwFqBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQFqBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABANhbWoJAJEDAgUHYW1vdW50cwUBagMJAGYCBQNhbWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhgsIGJ1dCB0cmllZCB0byBleGNoYW5nZSAJAKQDAQUDYW1qAwkAZgIAAAUDYW1qCQACAQkArAICCQCsAgIJAKwCAgIpWW91IHRyaWVkIHRvIGV4Y2hhbmdlIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEFA2FtagMJAGYCBQNhbWoAAAkAlgoECQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqBQNhbWoJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoFA2FtagkAZAIIBQNhY2MCXzMJAGsDBQNhbWoFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4CQDNCAIIBQNhY2MCXzQJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQUCdzAJAJYKBAkAzQgCCAUDYWNjAl8xCQCRAwIFB3Jlc0xpc3QFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80BAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWV4Y2hhbmdlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAgFBm1lcmdlZAJfMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAgFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAggFBm1lcmdlZAJfMwBkCQCUCgIJAM0IAgkAzggCBQRyZXN0CAUGbWVyZ2VkAl80CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKY3JhZnRHb29kcwIKcHJvZHVjdElkeAhxdWFudGl0eQQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQVNVUxUNgkAAgECKmV4YWN0bHkgMSBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAU0JAAIBCQCsAgICMUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgTWFudWZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBGNvbnQJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUJAGQCBQZOVU1SRVMAAwkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFEnJlY2lwZUlkeENvbnRpbmVudAMJAQIhPQIJAJEDAgUKY29udGluZW50cwUOcHJvZHVjdENvbnRJZHgFBGNvbnQJAAIBCQCsAgIJAKwCAgkArAICAh1UaGlzIHByb2R1Y3QgaXMgYXZhaWxhYmxlIGluIAkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAIRLCBidXQgeW91IGFyZSBpbiAFBGNvbnQECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEGZmlsbGVyAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAnhzAwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAJEDAgUIcHJvZExpc3QFAW4CATAEAXgJAQ1wYXJzZUludFZhbHVlAQUC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bmV3UGFjawUDbmlsBQNuaWwJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAp3aE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQEB3doVG90YWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQh2b2xUb3RhbAQGb3JkS2V5CQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQKY3VycmVudE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAF6CQELc2V0SW50ZXJuYWwDBQljdXJyZW50V2gFCmN1cnJlbnRPcmQFCG5ld09yZGVyBAtidXlWb2xTYWxkbwgFAXoCXzQEDHNlbGxWb2xTYWxkbwgFAXoCXzUECHdoTG9ja2VkCQBkAgULYnV5Vm9sU2FsZG8FDHNlbGxWb2xTYWxkbwQGd2hGcmVlCQBlAgkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQFCHdoTG9ja2VkAwkAZgIAAAUGd2hGcmVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITQXR0ZW1wdCB0byByZXNlcnZlIAkApAMBBQtidXlWb2xTYWxkbwIbIHNwYWNlIGZvciBidXkgb3JkZXJzLCBhbmQgCQCkAwEFDHNlbGxWb2xTYWxkbwIlIHNwYWNlIGZvciBzZWxsIG9yZGVycyAoYW5kIG9jY3VwaWVkPQkApAMBBQp3aE9jY3VwaWVkAh8pLCBsZWFkcyB0byBuZWdhdGl2ZSBmcmVlIHNwYWNlBAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQC5CQIIBQF6Al8xAgFfCQDMCAIJALkJAggFAXoCXzICAV8JAMwIAgkAuQkCCAUBegJfMwIBXwkAzAgCCQCkAwEFCHdoTG9ja2VkBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAh1c2RTYWxkbwgFAXoCXzYEB2FjdGlvbnMDCQBmAgUIdXNkU2FsZG8AAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQh1c2RTYWxkbwkAAgEJAKwCAgISUGF5bWVudCBuZWVkZWQgaXMgCQCkAwEFCHVzZFNhbGRvCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3T3JkZXJTdHIFA25pbAMJAAACBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3T3JkZXJTdHIFA25pbAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQVvd25lcgkBAS0BBQh1c2RTYWxkbwULdXNkdEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsCQCUCgIFB2FjdGlvbnMJAJQKAgUGcmVzdWx0BQZ3aFNhdmUBaQEUYWNjZXB0V2FyZWhvdXNlT3JkZXIDCmJwT3JkZXJTdHILbGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEEXN0YWtlZER1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBRFzdGFrZWREdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CBRFzdGFrZWREdWNrQXNzZXRJZAULZHVja0Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAhRZb3VyIHN0YWtlZCBkdWNrIGlzIAURc3Rha2VkRHVja0Fzc2V0SWQCDSwgYnV0IHBhc3NlZCAFC2R1Y2tBc3NldElkBAlsYW5kQXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQECWxhbmRPd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUJbGFuZE93bmVyBQpjYWxsZXJBZGRyCQACAQIeWW91IGNhbm5vdCB0cmFkZSB3aXRoIHlvdXJzZWxmBAxicE9yZGVyUGFydHMJALwJAgUKYnBPcmRlclN0cgIBOgMJAQIhPQIJAJADAQUMYnBPcmRlclBhcnRzAAMJAAIBAjJicE9yZGVyU3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIYnBPcmRSZXMJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAAIBXwQIYnBPcmRNYXQJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAQIBXwQJYnBPcmRQcm9kAwkAAAIJAJEDAgUMYnBPcmRlclBhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAICAV8DCQECIT0CCQCQAwEFCGJwT3JkUmVzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIYnBPcmRNYXQFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8ED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQEBXdoT3JkCQEIZ2V0T3JkZXIBBQZvcmRLZXkECHdoT3JkUmVzCQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeFJlcwIBXwQId2hPcmRNYXQJALUJAgkAkQMCBQV3aE9yZAUJb3JkSWR4TWF0AgFfBAl3aE9yZFByb2QDCQAAAgkAkQMCBQV3aE9yZAUKb3JkSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQV3aE9yZAUKb3JkSWR4UHJvZAIBXwQBcgoAAiRsBQhicE9yZFJlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ4KDAUDbmlsBQNuaWwFA25pbAAAAAAAAAAABQlicFJlc0xpc3QFCWN1cnJXaFJlcwUId2hPcmRSZXMFCHJlc1R5cGVzBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNjZXB0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAFtCgACJGwFCGJwT3JkTWF0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAngoMBQNuaWwFA25pbAUDbmlsCAUBcgJfNAgFAXICXzUIBQFyAl82AAAFCWJwTWF0TGlzdAUJY3VycldoTWF0BQh3aE9yZE1hdAUIbWF0VHlwZXMHCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhY2NlcHRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEAXADCQECIT0CCQCQAwEFCWJwT3JkUHJvZAAACgACJGwFCWJwT3JkUHJvZAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ4KDAUDbmlsBQNuaWwFA25pbAgFAW0CXzQIBQFtAl81CAUBbQJfNgAABQpicFByb2RMaXN0BQpjdXJyV2hQcm9kBQl3aE9yZFByb2QFCXByb2RUeXBlcwYKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFjY2VwdENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCeCgwFCmN1cnJXaFByb2QFCXdoT3JkUHJvZAUKYnBQcm9kTGlzdAgFAW0CXzQIBQFtAl81CAUBbQJfNgAABQpicFByb2RMaXN0BQpjdXJyV2hQcm9kBQl3aE9yZFByb2QFCXByb2RUeXBlcwYECHZvbFNhbGRvCAUBcAJfNAQMbmV3TG9ja2VkVm9sAwkAZgIAAAkAZQIFD2N1cnJXaExvY2tlZFZvbAUIdm9sU2FsZG8AAAkAZQIFD2N1cnJXaExvY2tlZFZvbAUIdm9sU2FsZG8EBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXICXzECAV8JAMwIAgkAuQkCCAUBbQJfMQIBXwkAzAgCCQC5CQIIBQFwAl8xAgFfCQDMCAIJAKQDAQUMbmV3TG9ja2VkVm9sBQNuaWwCAToEC25ld1doT3JkU3RyCQC6CQIJAMwIAgkAuQkCCAUBcgJfMgIBXwkAzAgCCQC5CQIIBQFtAl8yAgFfCQDMCAIJALkJAggFAXACXzICAV8FA25pbAIBOgQIbmV3QnBTdHIJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAggFAXICXzMCAV8JAMwIAgkAuQkCCAUBbQJfMwIBXwkAzAgCCQC5CQIIBQFwAl8zAgFfBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAZicFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwEB2FjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cgUDbmlsBA11c2RXaDJCcFNhbGRvCAUBcAJfNQQIYWN0aW9uczEDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMIBQFwAl81BQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5AwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDNCAIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCAUBcAJfNQkAaAIAAwULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZQIIBQFwAl81CQBoAgADBQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkBQdhY3Rpb25zBA11c2RCcDJXaFNhbGRvCAUBcAJfNgQIYWN0aW9uczIDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICElBheW1lbnQgbmVlZGVkIGlzIAkApAMBBQ11c2RCcDJXaFNhbGRvAwkAZgIFDk1JTlNIT1BQQVlNRU5UBQNhbXQJAAIBCQCsAgICG1BheW1lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IAkApAMBBQ5NSU5TSE9QUEFZTUVOVAQLdXNkQnAyV2hGZWUJAGsDCAUBcAJfNgUKQVVDVElPTkZFRQUFTVVMVDYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbGFuZE93bmVyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5AwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDNCAIJAM0IAgkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYJAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAM0IAgkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYJAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQFCGFjdGlvbnMxCQCUCgIFCGFjdGlvbnMyCQCVCgMFB2Jsb2NrZWQFBndoU2F2ZQUGYnBTYXZlAWkBEHNlbGxQcm9kdWN0c1RvRVMBB2Ftb3VudHMEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQAAwkAAAIFB2Jsb2NrZWQFB2Jsb2NrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBQQkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBBaXJwb3J0LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBAVlc0tleQkBDmtleUVzV2FyZWhvdXNlAAQIZXhpc3RTdHIJAKIIAQUFZXNLZXkEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAtQkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsCgEIbW92ZVByb2QCA2FjYwlyZWNpcGVTdHIEAWoIBQNhY2MCXzEECHF1YW50aXR5AwkAZgIJAJADAQUHYW1vdW50cwUBagkAkQMCBQdhbW91bnRzBQFqAAADCQBmAgAABQhxdWFudGl0eQkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQGcmVjaXBlCQC1CQIFCXJlY2lwZVN0cgIBXwMJAQIhPQIJAJADAQUGcmVjaXBlCQBkAgUGTlVNUkVTAAMJAAIBCQCsAgICF0ZhdGFsOiB1bmtub3duIHJlY2lwZTogBQlyZWNpcGVTdHIECHBhY2tTaXplCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBRFyZWNpcGVJZHhQYWNrc2l6ZQQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUIcGFja1NpemUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAULZXhpc3RBbW91bnQDCQBmAgUIcXVhbnRpdHkFBmNhbkJ1eQkAAgEJAKwCAgkArAICCQCsAgICF1dhcmVo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", "height": 2632547, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6HvfrK4zKzbeDbUs2YWW3UUbLkNvk119UBkwhsfdi6HM Next: BakS7xjhzDmNs3dopYyU59GWDFEnnYSRHkJTQmttissc Diff:
Old | New | Differences | |
---|---|---|---|
21 | 21 | else throw("Unknown chain") | |
22 | 22 | } | |
23 | 23 | ||
24 | - | let e = "__" | |
24 | + | let e = { | |
25 | + | let c = a | |
26 | + | if ((base58'2W' == c)) | |
27 | + | then 10000000000 | |
28 | + | else if ((base58'2T' == c)) | |
29 | + | then 100000000 | |
30 | + | else throw("Unknown chain") | |
31 | + | } | |
25 | 32 | ||
26 | - | let f = | |
33 | + | let f = "__" | |
27 | 34 | ||
28 | - | let g = | |
35 | + | let g = 1000000 | |
29 | 36 | ||
30 | - | let h = | |
37 | + | let h = 10000000 | |
31 | 38 | ||
32 | - | let i = | |
39 | + | let i = 100000000 | |
33 | 40 | ||
34 | - | let j = | |
41 | + | let j = 10000000000 | |
35 | 42 | ||
36 | - | let k = | |
43 | + | let k = "LAND" | |
37 | 44 | ||
38 | - | let l = " | |
45 | + | let l = "DUCK" | |
39 | 46 | ||
40 | - | let m = | |
47 | + | let m = "PRESALE" | |
41 | 48 | ||
42 | - | let n = | |
49 | + | let n = 6 | |
43 | 50 | ||
44 | - | let o = | |
51 | + | let o = 25 | |
45 | 52 | ||
46 | - | let p = | |
53 | + | let p = 100 | |
47 | 54 | ||
48 | - | let q = | |
55 | + | let q = 225 | |
49 | 56 | ||
50 | - | let r = | |
57 | + | let r = 400 | |
51 | 58 | ||
52 | - | let s = | |
59 | + | let s = 625 | |
53 | 60 | ||
54 | - | let t = | |
61 | + | let t = 3456000 | |
55 | 62 | ||
56 | - | let u = | |
63 | + | let u = 86400000 | |
57 | 64 | ||
58 | - | let v = | |
65 | + | let v = 10000000000 | |
59 | 66 | ||
60 | - | let w = | |
67 | + | let w = "Africa_F_Africa" | |
61 | 68 | ||
62 | - | let x = | |
69 | + | let x = 39637 | |
63 | 70 | ||
64 | - | let y = | |
71 | + | let y = 3 | |
65 | 72 | ||
66 | - | let z = | |
73 | + | let z = 4 | |
67 | 74 | ||
68 | - | let A = | |
75 | + | let A = 10 | |
69 | 76 | ||
70 | - | let B = | |
77 | + | let B = 100 | |
71 | 78 | ||
72 | - | let C = | |
79 | + | let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
73 | 80 | ||
74 | - | let D = | |
81 | + | let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
75 | 82 | ||
76 | - | let E = | |
83 | + | let E = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"] | |
77 | 84 | ||
78 | - | let F = | |
85 | + | let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
79 | 86 | ||
80 | - | let G = 2 | |
87 | + | let G = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
81 | 88 | ||
82 | - | let H = | |
89 | + | let H = 0 | |
83 | 90 | ||
84 | - | func I (J,K) = valueOrErrorMessage(getString(J, K), makeString(["mandatory ", toString(J), ".", K, " is not defined"], "")) | |
91 | + | let I = 1 | |
92 | + | ||
93 | + | let J = 2 | |
94 | + | ||
95 | + | let K = 3 | |
96 | + | ||
97 | + | let L = 4 | |
98 | + | ||
99 | + | let M = 0 | |
100 | + | ||
101 | + | let N = 1 | |
102 | + | ||
103 | + | let O = 2 | |
104 | + | ||
105 | + | let P = 3 | |
106 | + | ||
107 | + | let Q = 4 | |
108 | + | ||
109 | + | let R = 5 | |
110 | + | ||
111 | + | let S = 6 | |
112 | + | ||
113 | + | let T = 7 | |
114 | + | ||
115 | + | let U = 8 | |
116 | + | ||
117 | + | let V = 0 | |
118 | + | ||
119 | + | let W = 1 | |
120 | + | ||
121 | + | let X = 2 | |
122 | + | ||
123 | + | let Y = 3 | |
124 | + | ||
125 | + | let Z = 0 | |
126 | + | ||
127 | + | let aa = 1 | |
128 | + | ||
129 | + | let ab = 2 | |
130 | + | ||
131 | + | let ac = 3 | |
132 | + | ||
133 | + | let ad = 4 | |
134 | + | ||
135 | + | let ae = 0 | |
136 | + | ||
137 | + | let af = 1 | |
138 | + | ||
139 | + | let ag = 2 | |
140 | + | ||
141 | + | let ah = 3 | |
142 | + | ||
143 | + | let ai = 0 | |
144 | + | ||
145 | + | let aj = 1 | |
146 | + | ||
147 | + | let ak = 2 | |
148 | + | ||
149 | + | let al = 3 | |
150 | + | ||
151 | + | func am (an) = parseIntValue(split(G[an], "_")[T]) | |
85 | 152 | ||
86 | 153 | ||
87 | - | let L = 1 | |
88 | - | ||
89 | - | func M () = "%s__restConfig" | |
154 | + | func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], "")) | |
90 | 155 | ||
91 | 156 | ||
92 | - | func | |
157 | + | func ar (aq,as) = valueOrElse(getInteger(this, aq), as) | |
93 | 158 | ||
94 | 159 | ||
95 | - | func O (P) = split_4C(I(P, M()), e) | |
160 | + | let at = 1 | |
161 | + | ||
162 | + | let au = 2 | |
163 | + | ||
164 | + | let av = 3 | |
165 | + | ||
166 | + | let aw = 4 | |
167 | + | ||
168 | + | func ax () = "%s__restConfig" | |
96 | 169 | ||
97 | 170 | ||
98 | - | func | |
171 | + | func ay () = "%s__restAddr" | |
99 | 172 | ||
100 | 173 | ||
101 | - | let T = addressFromStringValue(valueOrElse(getString(this, N()), d)) | |
102 | - | ||
103 | - | let R = O(T) | |
104 | - | ||
105 | - | let U = Q(R, L) | |
106 | - | ||
107 | - | func V (W) = ("nftOwner_" + W) | |
174 | + | func az (aA) = split_4C(ao(aA, ax()), f) | |
108 | 175 | ||
109 | 176 | ||
110 | - | func | |
177 | + | func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD))) | |
111 | 178 | ||
112 | 179 | ||
113 | - | func Y (Z) = ("accRefBy_" + Z) | |
180 | + | let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d)) | |
181 | + | ||
182 | + | let aC = az(aE) | |
183 | + | ||
184 | + | let aF = aB(aC, at) | |
185 | + | ||
186 | + | let aG = aB(aC, au) | |
187 | + | ||
188 | + | let aH = aB(aC, av) | |
189 | + | ||
190 | + | let aI = aB(aC, aw) | |
191 | + | ||
192 | + | func aJ (aK) = ("lastTxIdByUser_" + aK) | |
114 | 193 | ||
115 | 194 | ||
116 | - | func | |
195 | + | func aL (aM) = ("nftOwner_" + aM) | |
117 | 196 | ||
118 | 197 | ||
119 | - | func | |
198 | + | func aN (aM) = ("landCustomNameByAssetId_" + aM) | |
120 | 199 | ||
121 | 200 | ||
122 | - | func | |
201 | + | func aO (aM) = ("stakedTime_" + aM) | |
123 | 202 | ||
124 | 203 | ||
125 | - | func | |
204 | + | func aP (aM) = ("infraLevel_" + aM) | |
126 | 205 | ||
127 | 206 | ||
128 | - | func | |
207 | + | func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_") | |
129 | 208 | ||
130 | 209 | ||
131 | - | func | |
210 | + | func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU) | |
132 | 211 | ||
133 | 212 | ||
134 | - | ||
213 | + | func aV (aW) = ("wareHouse_" + aW) | |
135 | 214 | ||
136 | - | let ak = 1 | |
137 | 215 | ||
138 | - | ||
216 | + | func aX (aU) = ("stakedLandsByOwner_" + aU) | |
139 | 217 | ||
140 | - | func am (an) = { | |
141 | - | let c = an | |
218 | + | ||
219 | + | func aY (aU) = ("stakedPiecesByOwner_" + aU) | |
220 | + | ||
221 | + | ||
222 | + | func aZ (aM) = ("duckCustomNameByAssetId_" + aM) | |
223 | + | ||
224 | + | ||
225 | + | func ba (aK) = ("accountCustomNameByAddr_" + aK) | |
226 | + | ||
227 | + | ||
228 | + | func bb (aK) = ("accRefBy_" + aK) | |
229 | + | ||
230 | + | ||
231 | + | func bc (aK) = ("accReferrals_" + aK) | |
232 | + | ||
233 | + | ||
234 | + | func bd (aM) = ("duckOwner_" + aM) | |
235 | + | ||
236 | + | ||
237 | + | func be (aU) = ("stakedDuckByOwner_" + aU) | |
238 | + | ||
239 | + | ||
240 | + | func bf (bg) = ("backPack_" + bg) | |
241 | + | ||
242 | + | ||
243 | + | func bh (bg) = ("duckLocation_" + bg) | |
244 | + | ||
245 | + | ||
246 | + | func bi (bg) = ("duckHealth_" + bg) | |
247 | + | ||
248 | + | ||
249 | + | func bj () = "resTypesProportions" | |
250 | + | ||
251 | + | ||
252 | + | func bk () = "contractsBlocked" | |
253 | + | ||
254 | + | ||
255 | + | func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm) | |
256 | + | ||
257 | + | ||
258 | + | func bn (aW) = ("landOrder_" + aW) | |
259 | + | ||
260 | + | ||
261 | + | func bo () = "emergencyWarehouseProducts" | |
262 | + | ||
263 | + | ||
264 | + | let bp = 0 | |
265 | + | ||
266 | + | let bq = 1 | |
267 | + | ||
268 | + | let br = 2 | |
269 | + | ||
270 | + | func bs (bt) = { | |
271 | + | let c = bt | |
142 | 272 | if ($isInstanceOf(c, "String")) | |
143 | 273 | then { | |
144 | - | let | |
145 | - | | |
274 | + | let bu = c | |
275 | + | bu | |
146 | 276 | } | |
147 | 277 | else throw("fail to cast into String") | |
148 | 278 | } | |
149 | 279 | ||
150 | 280 | ||
151 | - | func ap (aq) = { | |
152 | - | func ar (as,at) = (as + parseIntValue(aq[at])) | |
153 | - | ||
154 | - | let au = [0, 1, 2, 3, 4, 5] | |
155 | - | let av = size(au) | |
156 | - | let aw = 0 | |
157 | - | func ax (ay,az) = if ((az >= av)) | |
158 | - | then ay | |
159 | - | else ar(ay, au[az]) | |
160 | - | ||
161 | - | func aA (ay,az) = if ((az >= av)) | |
162 | - | then ay | |
163 | - | else throw("List size exceeds 6") | |
164 | - | ||
165 | - | aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6) | |
281 | + | func bv (bt) = { | |
282 | + | let c = bt | |
283 | + | if ($isInstanceOf(c, "Int")) | |
284 | + | then { | |
285 | + | let bw = c | |
286 | + | bw | |
287 | + | } | |
288 | + | else throw("fail to cast into Int") | |
166 | 289 | } | |
167 | 290 | ||
168 | 291 | ||
169 | - | let aB = 10000000000 | |
170 | - | ||
171 | - | let aC = 200 | |
172 | - | ||
173 | - | let aD = 300 | |
174 | - | ||
175 | - | let aE = 10000 | |
176 | - | ||
177 | - | let aF = 100000 | |
178 | - | ||
179 | - | func aG (aH,aI) = ((("factoryWhByContinentAndRes_" + aH) + "_") + toString(aI)) | |
180 | - | ||
181 | - | ||
182 | - | let aJ = 0 | |
183 | - | ||
184 | - | let aK = 1 | |
185 | - | ||
186 | - | let aL = 2 | |
187 | - | ||
188 | - | func aM (aN) = { | |
189 | - | let aO = split(valueOrElse(getString(aN), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":") | |
190 | - | [if ((size(split(aO[aJ], "_")) == k)) | |
191 | - | then aO[aJ] | |
192 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aO[aK], "_")) == k)) | |
193 | - | then aO[aK] | |
194 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", aO[aL]] | |
292 | + | func bx (bt) = { | |
293 | + | let c = bt | |
294 | + | if ($isInstanceOf(c, "List[Any]")) | |
295 | + | then { | |
296 | + | let by = c | |
297 | + | by | |
298 | + | } | |
299 | + | else throw("fail to cast into List[Any]") | |
195 | 300 | } | |
196 | 301 | ||
197 | 302 | ||
198 | - | func aP (aQ,aR,aS) = if (aS) | |
199 | - | then { | |
200 | - | let aT = if ((aQ >= 0)) | |
201 | - | then (((aQ + aR) - 1) / aR) | |
202 | - | else -((((-(aQ) + aR) - 1) / aR)) | |
203 | - | (aT * h) | |
204 | - | } | |
205 | - | else aQ | |
206 | - | ||
207 | - | ||
208 | - | func aU (aV,aI,aQ,aW) = { | |
209 | - | let aX = aG(aV, aI) | |
210 | - | let aY = valueOrElse(getInteger(aX), 0) | |
211 | - | let aZ = if ((aY > aB)) | |
212 | - | then 0 | |
213 | - | else if (((aY + aQ) > aB)) | |
214 | - | then (aB - aY) | |
215 | - | else aQ | |
216 | - | let ba = (fraction(aZ, ((aC * m) - fraction(((100 * aY) + (50 * aZ)), m, aB)), i) + fraction((aQ - aZ), m, h)) | |
217 | - | let bb = (aW - (aW / 100)) | |
218 | - | if (((bb * aQ) > (ba * h))) | |
219 | - | then throw((((((((((("Actual price = " + toString(ba)) + " / ") + toString(aQ)) + " < minPrice = ") + toString(aW)) + ", (") + aV) + ", ") + p[aI]) + ")")) | |
220 | - | else $Tuple2(IntegerEntry(aX, (aY + aQ)), ba) | |
303 | + | func bz (bt) = { | |
304 | + | let c = bt | |
305 | + | if ($isInstanceOf(c, "Boolean")) | |
306 | + | then { | |
307 | + | let bu = c | |
308 | + | bu | |
309 | + | } | |
310 | + | else throw("fail to cast into Boolean") | |
221 | 311 | } | |
222 | 312 | ||
223 | 313 | ||
224 | - | func | |
225 | - | let | |
226 | - | | |
227 | - | | |
228 | - | | |
229 | - | | |
230 | - | | |
231 | - | | |
232 | - | | |
233 | - | | |
234 | - | if (( | |
235 | - | then | |
236 | - | else | |
314 | + | func bA (bB) = { | |
315 | + | let c = bB | |
316 | + | if (("S" == c)) | |
317 | + | then o | |
318 | + | else if (("M" == c)) | |
319 | + | then p | |
320 | + | else if (("L" == c)) | |
321 | + | then q | |
322 | + | else if (("XL" == c)) | |
323 | + | then r | |
324 | + | else if (("XXL" == c)) | |
325 | + | then s | |
326 | + | else throw("Unknown land size") | |
237 | 327 | } | |
238 | 328 | ||
239 | 329 | ||
240 | - | func bk (bl) = { | |
241 | - | let aO = split(valueOrElse(getString(U, bl), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
242 | - | [toString(valueOrElse(parseInt(aO[E]), 0)), if ((size(split(aO[F], "_")) == k)) | |
243 | - | then aO[F] | |
244 | - | else "0_0_0_0_0_0", if ((size(split(aO[G], "_")) == k)) | |
245 | - | then aO[G] | |
246 | - | else "0_0_0_0_0_0", aO[H]] | |
330 | + | let bC = 0 | |
331 | + | ||
332 | + | let bD = 1 | |
333 | + | ||
334 | + | func bE (bF) = { | |
335 | + | let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_") | |
336 | + | func bH (bI,bJ) = (bI + parseIntValue(bJ)) | |
337 | + | ||
338 | + | let bK = { | |
339 | + | let bL = bG | |
340 | + | let bM = size(bL) | |
341 | + | let bN = 0 | |
342 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
343 | + | then bP | |
344 | + | else bH(bP, bL[bQ]) | |
345 | + | ||
346 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
347 | + | then bP | |
348 | + | else throw("List size exceeds 6") | |
349 | + | ||
350 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
351 | + | } | |
352 | + | let bS = if ((bF == "")) | |
353 | + | then 0 | |
354 | + | else { | |
355 | + | let bT = getString(aF, aX(bF)) | |
356 | + | let bU = if (isDefined(bT)) | |
357 | + | then split_51C(value(bT), "_") | |
358 | + | else nil | |
359 | + | func bV (bI,aW) = { | |
360 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
361 | + | let bB = split(bW.description, "_")[W] | |
362 | + | (bI + bA(bB)) | |
363 | + | } | |
364 | + | ||
365 | + | let bL = bU | |
366 | + | let bM = size(bL) | |
367 | + | let bN = 0 | |
368 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
369 | + | then bP | |
370 | + | else bV(bP, bL[bQ]) | |
371 | + | ||
372 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
373 | + | then bP | |
374 | + | else throw("List size exceeds 100") | |
375 | + | ||
376 | + | bY(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
377 | + | } | |
378 | + | [bK, bS] | |
247 | 379 | } | |
248 | 380 | ||
249 | 381 | ||
250 | - | func bm () = if (valueOrElse(getBoolean(U, af()), false)) | |
382 | + | func bZ (ca) = { | |
383 | + | func cb (cc,cd) = (cc + parseIntValue(ca[cd])) | |
384 | + | ||
385 | + | let bL = [0, 1, 2, 3, 4, 5] | |
386 | + | let bM = size(bL) | |
387 | + | let bN = 0 | |
388 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
389 | + | then bP | |
390 | + | else cb(bP, bL[bQ]) | |
391 | + | ||
392 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
393 | + | then bP | |
394 | + | else throw("List size exceeds 6") | |
395 | + | ||
396 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
397 | + | } | |
398 | + | ||
399 | + | ||
400 | + | let ce = 10000000000 | |
401 | + | ||
402 | + | let cf = 10000 | |
403 | + | ||
404 | + | let cg = 200 | |
405 | + | ||
406 | + | let ch = 300 | |
407 | + | ||
408 | + | let ci = 10000 | |
409 | + | ||
410 | + | let cj = 100000 | |
411 | + | ||
412 | + | func ck (cl,cm) = ((("factoryWhByContinentAndRes_" + cl) + "_") + toString(cm)) | |
413 | + | ||
414 | + | ||
415 | + | let cn = 0 | |
416 | + | ||
417 | + | let co = 1 | |
418 | + | ||
419 | + | let cp = 2 | |
420 | + | ||
421 | + | func cq (cr) = { | |
422 | + | let cs = split(valueOrElse(getString(cr), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":") | |
423 | + | [if ((size(split(cs[cn], "_")) == n)) | |
424 | + | then cs[cn] | |
425 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(cs[co], "_")) == n)) | |
426 | + | then cs[co] | |
427 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", cs[cp]] | |
428 | + | } | |
429 | + | ||
430 | + | ||
431 | + | func ct (cu,cv,cw) = if (cw) | |
432 | + | then { | |
433 | + | let cx = if ((cu >= 0)) | |
434 | + | then (((cu + cv) - 1) / cv) | |
435 | + | else -((((-(cu) + cv) - 1) / cv)) | |
436 | + | (cx * i) | |
437 | + | } | |
438 | + | else cu | |
439 | + | ||
440 | + | ||
441 | + | func cy (cz,cm,cu,cA) = { | |
442 | + | let cB = ck(cz, cm) | |
443 | + | let cC = valueOrElse(getInteger(cB), 0) | |
444 | + | let cD = if ((cC > ce)) | |
445 | + | then 0 | |
446 | + | else if (((cC + cu) > ce)) | |
447 | + | then (ce - cC) | |
448 | + | else cu | |
449 | + | let cE = (fraction(cD, ((cg * x) - fraction(((100 * cC) + (50 * cD)), x, ce)), j) + fraction((cu - cD), x, i)) | |
450 | + | let cF = (cA - (cA / 100)) | |
451 | + | if (((cF * cu) > (cE * i))) | |
452 | + | then throw((((((((((("Actual price = " + toString(cE)) + " / ") + toString(cu)) + " < minPrice = ") + toString(cA)) + ", (") + cz) + ", ") + C[cm]) + ")")) | |
453 | + | else $Tuple2(IntegerEntry(cB, (cC + cu)), cE) | |
454 | + | } | |
455 | + | ||
456 | + | ||
457 | + | func cG (cz,cH,cu,cI) = { | |
458 | + | let cB = ck(cz, cH) | |
459 | + | let cC = valueOrElse(getInteger(cB), 0) | |
460 | + | let cJ = if ((cC > ce)) | |
461 | + | then min([cu, (cC - ce)]) | |
462 | + | else 0 | |
463 | + | let cK = min([cC, (cu - cJ)]) | |
464 | + | let cL = (cK + cJ) | |
465 | + | let cM = (fraction(cK, ((ch * x) - fraction(((100 * cC) - (50 * cK)), x, ce)), j) + fraction(cJ, (2 * x), i)) | |
466 | + | let cN = (cI + (cI / 100)) | |
467 | + | if (((cM * i) > (cN * cL))) | |
468 | + | then throw((((((((((("Actual price = " + toString(cM)) + " / ") + toString(cL)) + " > maxPrice = ") + toString(cI)) + ", (") + cz) + ", ") + D[cH]) + ")")) | |
469 | + | else $Tuple3(IntegerEntry(cB, (cC - cL)), cM, cL) | |
470 | + | } | |
471 | + | ||
472 | + | ||
473 | + | func cO (cP) = { | |
474 | + | let cs = split(valueOrElse(getString(aF, cP), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
475 | + | [toString(valueOrElse(parseInt(cs[ai]), 0)), if ((size(split(cs[aj], "_")) == n)) | |
476 | + | then cs[aj] | |
477 | + | else "0_0_0_0_0_0", if ((size(split(cs[ak], "_")) == n)) | |
478 | + | then cs[ak] | |
479 | + | else "0_0_0_0_0_0", cs[al]] | |
480 | + | } | |
481 | + | ||
482 | + | ||
483 | + | func cQ () = if (valueOrElse(getBoolean(aF, bk()), false)) | |
251 | 484 | then throw("Contracts are under maintenance") | |
252 | 485 | else unit | |
253 | 486 | ||
254 | 487 | ||
255 | - | func | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | then parseIntValue(split( | |
488 | + | func cR (bI,bJ) = { | |
489 | + | let cd = bI._1 | |
490 | + | let cS = bI._8 | |
491 | + | let cv = if (cS) | |
492 | + | then parseIntValue(split(G[cd], "_")[T]) | |
260 | 493 | else 0 | |
261 | - | let | |
262 | - | if ((size( | |
494 | + | let cT = split(bJ, "@") | |
495 | + | if ((size(cT) != 2)) | |
263 | 496 | then throw("Incorrect order format, should be amount@price") | |
264 | 497 | else { | |
265 | - | let | |
266 | - | let | |
267 | - | let | |
268 | - | let | |
269 | - | let | |
270 | - | then parseIntValue( | |
498 | + | let cU = parseIntValue(cT[0]) | |
499 | + | let cV = parseIntValue(cT[1]) | |
500 | + | let cW = fraction(cU, cV, i) | |
501 | + | let cX = ct(cU, cv, cS) | |
502 | + | let cY = if ((size(bI._6) > cd)) | |
503 | + | then parseIntValue(bI._6[cd]) | |
271 | 504 | else 0 | |
272 | - | let | |
273 | - | then | |
505 | + | let cZ = split(if ((size(bI._7) > cd)) | |
506 | + | then bI._7[cd] | |
274 | 507 | else "0@0", "@") | |
275 | - | let | |
276 | - | let | |
277 | - | if (if ((0 > | |
508 | + | let da = parseIntValue(cZ[0]) | |
509 | + | let db = parseIntValue(cZ[1]) | |
510 | + | if (if ((0 > db)) | |
278 | 511 | then true | |
279 | - | else (0 > | |
512 | + | else (0 > cV)) | |
280 | 513 | then throw("Price can't be negative") | |
281 | 514 | else { | |
282 | - | let | |
283 | - | let | |
284 | - | if (( | |
285 | - | then if (( | |
286 | - | then $Tuple8(( | |
287 | - | else $Tuple8(( | |
288 | - | else if (( | |
289 | - | then if ((0 > | |
290 | - | then $Tuple8(( | |
291 | - | else $Tuple8(( | |
292 | - | else if ((0 > | |
515 | + | let dc = fraction(da, db, i) | |
516 | + | let dd = ct(da, cv, cS) | |
517 | + | if ((cU == 0)) | |
518 | + | then if ((da > 0)) | |
519 | + | then $Tuple8((cd + 1), (bI._2 :+ toString(cY)), bI._3, bI._4, (bI._5 - dc), bI._6, bI._7, cS) | |
520 | + | else $Tuple8((cd + 1), (bI._2 :+ toString((cY - da))), bI._3, bI._4, bI._5, bI._6, bI._7, cS) | |
521 | + | else if ((cU > 0)) | |
522 | + | then if ((0 > da)) | |
523 | + | then $Tuple8((cd + 1), (bI._2 :+ toString((cY - da))), (bI._3 + cX), bI._4, (bI._5 + cW), bI._6, bI._7, cS) | |
524 | + | else $Tuple8((cd + 1), (bI._2 :+ toString(cY)), (bI._3 + cX), bI._4, ((bI._5 + cW) - dc), bI._6, bI._7, cS) | |
525 | + | else if ((0 > da)) | |
293 | 526 | then { | |
294 | - | let | |
295 | - | if ((0 > ( | |
296 | - | then throw((((("Attempt to take " + toString( | |
297 | - | else $Tuple8(( | |
527 | + | let de = (da - cU) | |
528 | + | if ((0 > (cY - de))) | |
529 | + | then throw((((("Attempt to take " + toString(de)) + " from warehouse, but only ") + toString(cY)) + " available")) | |
530 | + | else $Tuple8((cd + 1), (bI._2 :+ toString((cY - de))), bI._3, (bI._4 - cX), bI._5, bI._6, bI._7, cS) | |
298 | 531 | } | |
299 | - | else if ((0 > ( | |
300 | - | then throw((((("Attempt to take " + toString(-( | |
301 | - | else $Tuple8(( | |
532 | + | else if ((0 > (cY + cU))) | |
533 | + | then throw((((("Attempt to take " + toString(-(cU))) + " from warehouse, but only ") + toString(cY)) + " available")) | |
534 | + | else $Tuple8((cd + 1), (bI._2 :+ toString((cY + cU))), bI._3, (bI._4 - cX), (bI._5 - dc), bI._6, bI._7, cS) | |
302 | 535 | } | |
303 | 536 | } | |
304 | 537 | } | |
305 | 538 | ||
306 | 539 | ||
307 | - | func | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
540 | + | func df (dg,dh,di) = { | |
541 | + | let dj = split(dg[aa], "_") | |
542 | + | let dk = split(dg[ab], "_") | |
543 | + | let dl = if ((dg[ac] == "")) | |
311 | 544 | then nil | |
312 | - | else split( | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
545 | + | else split(dg[ac], "_") | |
546 | + | let dm = split(dh[cn], "_") | |
547 | + | let dn = split(dh[co], "_") | |
548 | + | let do = if ((dh[cp] == "")) | |
316 | 549 | then nil | |
317 | - | else split( | |
318 | - | if ((size( | |
550 | + | else split(dh[cp], "_") | |
551 | + | if ((size(di) != 3)) | |
319 | 552 | then throw("newOrderStr should contain exactly 2 ':' separators") | |
320 | 553 | else { | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
554 | + | let dp = split(di[0], "_") | |
555 | + | let dq = split(di[1], "_") | |
556 | + | let dr = if ((di[2] == "")) | |
324 | 557 | then nil | |
325 | - | else split( | |
326 | - | if ((size( | |
558 | + | else split(di[2], "_") | |
559 | + | if ((size(dp) != n)) | |
327 | 560 | then throw("All 6 resources should be passed") | |
328 | - | else if ((size( | |
561 | + | else if ((size(dq) != n)) | |
329 | 562 | then throw("All 6 materials should be passed") | |
330 | 563 | else { | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | func | |
336 | - | then | |
337 | - | else | |
564 | + | let ds = { | |
565 | + | let bL = dp | |
566 | + | let bM = size(bL) | |
567 | + | let bN = $Tuple8(0, nil, 0, 0, 0, dj, dm, false) | |
568 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
569 | + | then bP | |
570 | + | else cR(bP, bL[bQ]) | |
338 | 571 | ||
339 | - | func | |
340 | - | then | |
572 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
573 | + | then bP | |
341 | 574 | else throw("List size exceeds 6") | |
342 | 575 | ||
343 | - | | |
576 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
344 | 577 | } | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | func | |
350 | - | then | |
351 | - | else | |
578 | + | let cL = { | |
579 | + | let bL = dq | |
580 | + | let bM = size(bL) | |
581 | + | let bN = $Tuple8(0, nil, ds._3, ds._4, ds._5, dk, dn, false) | |
582 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
583 | + | then bP | |
584 | + | else cR(bP, bL[bQ]) | |
352 | 585 | ||
353 | - | func | |
354 | - | then | |
586 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
587 | + | then bP | |
355 | 588 | else throw("List size exceeds 6") | |
356 | 589 | ||
357 | - | | |
590 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
358 | 591 | } | |
359 | - | let | |
592 | + | let cs = if ((size(dr) != 0)) | |
360 | 593 | then { | |
361 | - | let | |
362 | - | let | |
363 | - | let | |
364 | - | func | |
365 | - | then | |
366 | - | else | |
594 | + | let bL = dr | |
595 | + | let bM = size(bL) | |
596 | + | let bN = $Tuple8(0, nil, cL._3, cL._4, cL._5, dl, do, true) | |
597 | + | func dt (bP,bQ) = if ((bQ >= bM)) | |
598 | + | then bP | |
599 | + | else cR(bP, bL[bQ]) | |
367 | 600 | ||
368 | - | func | |
369 | - | then | |
601 | + | func du (bP,bQ) = if ((bQ >= bM)) | |
602 | + | then bP | |
370 | 603 | else throw("List size exceeds 50") | |
371 | 604 | ||
372 | - | | |
605 | + | du(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
373 | 606 | } | |
374 | - | else $Tuple8(0, | |
375 | - | $Tuple6( | |
607 | + | else $Tuple8(0, dl, cL._3, cL._4, cL._5, dl, do, true) | |
608 | + | $Tuple6(ds._2, cL._2, cs._2, cs._3, cs._4, cs._5) | |
376 | 609 | } | |
377 | 610 | } | |
378 | 611 | } | |
379 | 612 | ||
380 | 613 | ||
381 | - | func | |
382 | - | let | |
383 | - | let | |
384 | - | let | |
385 | - | then parseIntValue(split( | |
614 | + | func dv (bI,dw) = { | |
615 | + | let cd = bI._7 | |
616 | + | let cS = bI._12 | |
617 | + | let cv = if (cS) | |
618 | + | then parseIntValue(split(G[cd], "_")[T]) | |
386 | 619 | else 0 | |
387 | - | let | |
388 | - | if ((size( | |
620 | + | let dx = split(dw, "@") | |
621 | + | if ((size(dx) != 2)) | |
389 | 622 | then throw("Incorrect order format, should be amount@price") | |
390 | 623 | else { | |
391 | - | let | |
392 | - | let | |
393 | - | if ((0 > | |
624 | + | let dy = parseIntValue(dx[0]) | |
625 | + | let dz = parseIntValue(dx[1]) | |
626 | + | if ((0 > dz)) | |
394 | 627 | then throw("Price can't be negative") | |
395 | 628 | else { | |
396 | - | let | |
397 | - | let | |
398 | - | then parseIntValue( | |
629 | + | let dA = fraction(dy, dz, i) | |
630 | + | let dB = if ((size(bI._8) > cd)) | |
631 | + | then parseIntValue(bI._8[cd]) | |
399 | 632 | else 0 | |
400 | - | let | |
401 | - | then parseIntValue( | |
633 | + | let cY = if ((size(bI._9) > cd)) | |
634 | + | then parseIntValue(bI._9[cd]) | |
402 | 635 | else 0 | |
403 | - | let | |
404 | - | then | |
636 | + | let dC = if ((size(bI._10) > cd)) | |
637 | + | then bI._10[cd] | |
405 | 638 | else "0@0" | |
406 | - | let | |
407 | - | let | |
408 | - | let | |
409 | - | if (if (( | |
410 | - | then ( | |
639 | + | let dD = split(dC, "@") | |
640 | + | let dE = parseIntValue(dD[0]) | |
641 | + | let dF = parseIntValue(dD[1]) | |
642 | + | if (if ((dy != 0)) | |
643 | + | then (dz != dF) | |
411 | 644 | else false) | |
412 | - | then throw(((((("Prices of " + | |
645 | + | then throw(((((("Prices of " + bI._11[cd]) + " don't match! WH price=") + toString(dF)) + ", your price=") + toString(dz))) | |
413 | 646 | else { | |
414 | - | let | |
415 | - | let | |
416 | - | if (( | |
417 | - | then $Tuple12(( | |
418 | - | else if (( | |
419 | - | then if ((0 > | |
420 | - | then if (( | |
421 | - | then throw(((((("Attempt to buy " + toString( | |
422 | - | else $Tuple12(( | |
423 | - | else throw((("Attempt to buy " + | |
424 | - | else if (( | |
425 | - | then if ((-( | |
426 | - | then throw(((((("Attempt to sell " + toString(-( | |
427 | - | else if ((-( | |
428 | - | then throw(((((("Attempt to sell " + toString(-( | |
429 | - | else $Tuple12(( | |
430 | - | else throw((("Attempt to sell " + | |
647 | + | let dG = fraction(dE, dF, i) | |
648 | + | let dH = ct(dy, cv, cS) | |
649 | + | if ((dy == 0)) | |
650 | + | then $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ dC), (bI._3 :+ toString(dB)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS) | |
651 | + | else if ((dy > 0)) | |
652 | + | then if ((0 > dE)) | |
653 | + | then if ((dy > -(dE))) | |
654 | + | then throw(((((("Attempt to buy " + toString(dy)) + " of ") + bI._11[cd]) + ", but warehouse only sells ") + toString(-(dE)))) | |
655 | + | else $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ ((toString((dE + dy)) + "@") + toString(dF))), (bI._3 :+ toString((dB + dy))), (bI._4 + dH), bI._5, (bI._6 + dA), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS) | |
656 | + | else throw((("Attempt to buy " + bI._11[cd]) + " while warehouse doesn't sell it")) | |
657 | + | else if ((dE > 0)) | |
658 | + | then if ((-(dy) > dE)) | |
659 | + | then throw(((((("Attempt to sell " + toString(-(dy))) + " of ") + bI._11[cd]) + ", but warehouse only buys ") + toString(dE))) | |
660 | + | else if ((-(dy) > dB)) | |
661 | + | then throw(((((("Attempt to sell " + toString(-(dy))) + ", but you only have ") + toString(dB)) + " of ") + bI._11[cd])) | |
662 | + | else $Tuple12((bI._1 :+ toString((cY - dy))), (bI._2 :+ ((toString((dE + dy)) + "@") + toString(dF))), (bI._3 :+ toString((dB + dy))), (bI._4 - dH), (bI._5 - dA), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS) | |
663 | + | else throw((("Attempt to sell " + bI._11[cd]) + " while warehouse doesn't buy it")) | |
431 | 664 | } | |
432 | 665 | } | |
433 | 666 | } | |
434 | 667 | } | |
435 | 668 | ||
436 | 669 | ||
437 | - | @Callable( | |
438 | - | func recalcLockedVolumeREADONLY ( | |
439 | - | let | |
440 | - | let | |
441 | - | $Tuple2(nil, ( | |
670 | + | @Callable(dI) | |
671 | + | func recalcLockedVolumeREADONLY (aW,dJ) = { | |
672 | + | let dh = cq(bn(aW)) | |
673 | + | let dK = df(dJ, dh, dh) | |
674 | + | $Tuple2(nil, (dK._4 + dK._5)) | |
442 | 675 | } | |
443 | 676 | ||
444 | 677 | ||
445 | 678 | ||
446 | - | @Callable( | |
447 | - | func constructorV1 ( | |
679 | + | @Callable(dI) | |
680 | + | func constructorV1 (dL) = if ((dI.caller != this)) | |
448 | 681 | then throw("Permission denied") | |
449 | - | else [StringEntry( | |
682 | + | else [StringEntry(ay(), dL)] | |
450 | 683 | ||
451 | 684 | ||
452 | 685 | ||
453 | - | @Callable( | |
454 | - | func sellResources ( | |
455 | - | let | |
456 | - | if (( | |
686 | + | @Callable(dI) | |
687 | + | func sellResources (dM,dN) = { | |
688 | + | let dO = cQ() | |
689 | + | if ((dO == dO)) | |
457 | 690 | then { | |
458 | - | let | |
459 | - | if ((size( | |
691 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
692 | + | if ((size(dI.payments) != 0)) | |
460 | 693 | then throw("sellResources doesn't require any payments") | |
461 | 694 | else { | |
462 | - | let | |
463 | - | if (( | |
464 | - | then throw(("Duck location type should be Factory, but is " + | |
695 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
696 | + | if ((dP[bq] != "F")) | |
697 | + | then throw(("Duck location type should be Factory, but is " + dP[bq])) | |
465 | 698 | else { | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | func | |
470 | - | then throw(((((("You have " + | |
471 | - | else if ((0 > | |
472 | - | then throw(((("You tried to sell negative amount of " + | |
473 | - | else if (( | |
699 | + | let cz = dP[br] | |
700 | + | let dQ = cO(bf(bg)) | |
701 | + | let dR = split(dQ[aj], "_") | |
702 | + | func bH (bI,cd) = if ((dM[cd] > parseIntValue(dR[cd]))) | |
703 | + | then throw(((((("You have " + dR[cd]) + " of ") + C[cd]) + ", but tried to sell ") + toString(dM[cd]))) | |
704 | + | else if ((0 > dM[cd])) | |
705 | + | then throw(((("You tried to sell negative amount of " + C[cd]) + ": ") + toString(dM[cd]))) | |
706 | + | else if ((dM[cd] > 0)) | |
474 | 707 | then { | |
475 | - | let | |
476 | - | $Tuple3(( | |
708 | + | let dS = cy(cz, cd, dM[cd], dN[cd]) | |
709 | + | $Tuple3((bI._1 :+ dS._1), (bI._2 :+ toString((parseIntValue(dR[cd]) - dM[cd]))), (bI._3 + dS._2)) | |
477 | 710 | } | |
478 | - | else $Tuple3( | |
711 | + | else $Tuple3(bI._1, (bI._2 :+ dR[cd]), bI._3) | |
479 | 712 | ||
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | func | |
485 | - | then | |
486 | - | else | |
713 | + | let dT = { | |
714 | + | let bL = [0, 1, 2, 3, 4, 5] | |
715 | + | let bM = size(bL) | |
716 | + | let bN = $Tuple3(nil, nil, 0) | |
717 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
718 | + | then bP | |
719 | + | else bH(bP, bL[bQ]) | |
487 | 720 | ||
488 | - | func | |
489 | - | then | |
721 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
722 | + | then bP | |
490 | 723 | else throw("List size exceeds 6") | |
491 | 724 | ||
492 | - | | |
725 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
493 | 726 | } | |
494 | - | let | |
495 | - | let | |
496 | - | $Tuple2(( | |
727 | + | let dU = makeString([dQ[ai], makeString(dT._2, "_"), dQ[ak], dQ[al]], ":") | |
728 | + | let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil)) | |
729 | + | $Tuple2((dT._1 :+ ScriptTransfer(dI.caller, dT._3, b)), dV) | |
497 | 730 | } | |
498 | 731 | } | |
499 | 732 | } | |
502 | 735 | ||
503 | 736 | ||
504 | 737 | ||
505 | - | @Callable( | |
506 | - | func buyMaterials ( | |
507 | - | let | |
508 | - | if (( | |
738 | + | @Callable(dI) | |
739 | + | func buyMaterials (dM,dW) = { | |
740 | + | let dO = cQ() | |
741 | + | if ((dO == dO)) | |
509 | 742 | then { | |
510 | - | let | |
511 | - | if ((size( | |
743 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
744 | + | if ((size(dI.payments) != 1)) | |
512 | 745 | then throw("exactly 1 payment must be attached") | |
513 | 746 | else { | |
514 | - | let | |
515 | - | let | |
516 | - | let | |
517 | - | if (( | |
747 | + | let dX = dI.payments[0] | |
748 | + | let dY = dX.amount | |
749 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
750 | + | if ((dZ != b)) | |
518 | 751 | then throw("USDT payments only!") | |
519 | 752 | else { | |
520 | - | let | |
521 | - | if (( | |
522 | - | then throw(("Duck location type should be Factory, but is " + | |
753 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
754 | + | if ((dP[bq] != "F")) | |
755 | + | then throw(("Duck location type should be Factory, but is " + dP[bq])) | |
523 | 756 | else { | |
524 | - | let | |
525 | - | let | |
526 | - | let | |
527 | - | func | |
528 | - | then throw(((("You tried to buy negative amount of " + | |
529 | - | else if (( | |
757 | + | let cz = dP[br] | |
758 | + | let dQ = cO(bf(bg)) | |
759 | + | let ea = split(dQ[ak], "_") | |
760 | + | func eb (bI,cd) = if ((0 > dM[cd])) | |
761 | + | then throw(((("You tried to buy negative amount of " + D[cd]) + ": ") + toString(dM[cd]))) | |
762 | + | else if ((dM[cd] > 0)) | |
530 | 763 | then { | |
531 | - | let | |
532 | - | $Tuple3(( | |
764 | + | let dS = cG(cz, cd, dM[cd], dW[cd]) | |
765 | + | $Tuple3((bI._1 :+ dS._1), (bI._2 :+ toString((parseIntValue(ea[cd]) + dS._3))), (bI._3 + dS._2)) | |
533 | 766 | } | |
534 | - | else $Tuple3( | |
767 | + | else $Tuple3(bI._1, (bI._2 :+ ea[cd]), bI._3) | |
535 | 768 | ||
536 | - | let | |
537 | - | let | |
538 | - | let | |
539 | - | let | |
540 | - | func | |
541 | - | then | |
542 | - | else | |
769 | + | let dT = { | |
770 | + | let bL = [0, 1, 2, 3, 4, 5] | |
771 | + | let bM = size(bL) | |
772 | + | let bN = $Tuple3(nil, nil, 0) | |
773 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
774 | + | then bP | |
775 | + | else eb(bP, bL[bQ]) | |
543 | 776 | ||
544 | - | func | |
545 | - | then | |
777 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
778 | + | then bP | |
546 | 779 | else throw("List size exceeds 6") | |
547 | 780 | ||
548 | - | | |
781 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
549 | 782 | } | |
550 | - | if (( | |
551 | - | then throw(((("Insufficient payment! Attached=" + toString( | |
783 | + | if ((dT._3 > dY)) | |
784 | + | then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3))) | |
552 | 785 | else { | |
553 | - | let | |
554 | - | let | |
555 | - | let | |
556 | - | then [ScriptTransfer( | |
786 | + | let dU = makeString([dQ[ai], dQ[aj], makeString(dT._2, "_"), dQ[al]], ":") | |
787 | + | let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil)) | |
788 | + | let aA = if (((dY - dT._3) > 0)) | |
789 | + | then [ScriptTransfer(dI.caller, (dY - dT._3), b)] | |
557 | 790 | else nil | |
558 | - | let | |
559 | - | $Tuple2((( | |
791 | + | let ec = (dT._3 / 100) | |
792 | + | $Tuple2(((dT._1 ++ aA) :+ ScriptTransfer(aE, ec, b)), dV) | |
560 | 793 | } | |
561 | 794 | } | |
562 | 795 | } | |
567 | 800 | ||
568 | 801 | ||
569 | 802 | ||
570 | - | @Callable( | |
571 | - | func exchangeResources ( | |
572 | - | let | |
573 | - | if (( | |
803 | + | @Callable(dI) | |
804 | + | func exchangeResources (dM) = { | |
805 | + | let dO = cQ() | |
806 | + | if ((dO == dO)) | |
574 | 807 | then { | |
575 | - | let | |
576 | - | if ((size( | |
808 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
809 | + | if ((size(dI.payments) != 1)) | |
577 | 810 | then throw("exactly 1 payment must be attached") | |
578 | 811 | else { | |
579 | - | let | |
580 | - | let | |
581 | - | let | |
582 | - | if (( | |
812 | + | let dX = dI.payments[0] | |
813 | + | let dY = dX.amount | |
814 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
815 | + | if ((dZ != b)) | |
583 | 816 | then throw("USDT payments only!") | |
584 | 817 | else { | |
585 | - | let | |
586 | - | if (( | |
587 | - | then throw(("Duck location type should be Factory, but is " + | |
818 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
819 | + | if ((dP[bq] != "F")) | |
820 | + | then throw(("Duck location type should be Factory, but is " + dP[bq])) | |
588 | 821 | else { | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | func | |
594 | - | let | |
595 | - | let | |
596 | - | let | |
597 | - | if (( | |
598 | - | then throw(((((("You have " + | |
599 | - | else if ((0 > | |
600 | - | then throw(((("You tried to exchange negative amount of " + | |
601 | - | else if (( | |
602 | - | then $Tuple4(( | |
603 | - | else $Tuple4(( | |
822 | + | let cz = dP[br] | |
823 | + | let dQ = cO(bf(bg)) | |
824 | + | let dR = split(dQ[aj], "_") | |
825 | + | let ea = split(dQ[ak], "_") | |
826 | + | func ed (bI,cd) = { | |
827 | + | let cB = ck(cz, cd) | |
828 | + | let cC = valueOrElse(getInteger(cB), 0) | |
829 | + | let ee = dM[cd] | |
830 | + | if ((ee > parseIntValue(dR[cd]))) | |
831 | + | then throw(((((("You have " + dR[cd]) + " of ") + C[cd]) + ", but tried to exchange ") + toString(ee))) | |
832 | + | else if ((0 > ee)) | |
833 | + | then throw(((("You tried to exchange negative amount of " + C[cd]) + ": ") + toString(ee))) | |
834 | + | else if ((ee > 0)) | |
835 | + | then $Tuple4((bI._1 :+ toString((parseIntValue(dR[cd]) - ee))), (bI._2 :+ toString((parseIntValue(ea[cd]) + ee))), (bI._3 + fraction(ee, x, i)), (bI._4 :+ IntegerEntry(cB, cC))) | |
836 | + | else $Tuple4((bI._1 :+ dR[cd]), (bI._2 :+ ea[cd]), bI._3, bI._4) | |
604 | 837 | } | |
605 | 838 | ||
606 | - | let | |
607 | - | let | |
608 | - | let | |
609 | - | let | |
610 | - | func | |
611 | - | then | |
612 | - | else | |
839 | + | let dT = { | |
840 | + | let bL = [0, 1, 2, 3, 4, 5] | |
841 | + | let bM = size(bL) | |
842 | + | let bN = $Tuple4(nil, nil, 0, nil) | |
843 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
844 | + | then bP | |
845 | + | else ed(bP, bL[bQ]) | |
613 | 846 | ||
614 | - | func | |
615 | - | then | |
847 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
848 | + | then bP | |
616 | 849 | else throw("List size exceeds 6") | |
617 | 850 | ||
618 | - | | |
851 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
619 | 852 | } | |
620 | - | if (( | |
621 | - | then throw(((("Insufficient payment! Attached=" + toString( | |
853 | + | if ((dT._3 > dY)) | |
854 | + | then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3))) | |
622 | 855 | else { | |
623 | - | let | |
624 | - | let | |
625 | - | let | |
626 | - | then [ScriptTransfer( | |
856 | + | let dU = makeString([dQ[ai], makeString(dT._1, "_"), makeString(dT._2, "_"), dQ[al]], ":") | |
857 | + | let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil)) | |
858 | + | let aA = if (((dY - dT._3) > 0)) | |
859 | + | then [ScriptTransfer(dI.caller, (dY - dT._3), b)] | |
627 | 860 | else nil | |
628 | - | let | |
629 | - | $Tuple2((( | |
861 | + | let ec = (dT._3 / 100) | |
862 | + | $Tuple2(((aA ++ dT._4) :+ ScriptTransfer(aE, ec, b)), dV) | |
630 | 863 | } | |
631 | 864 | } | |
632 | 865 | } | |
637 | 870 | ||
638 | 871 | ||
639 | 872 | ||
640 | - | @Callable( | |
641 | - | func craftGoods ( | |
642 | - | let | |
643 | - | if (( | |
644 | - | then if ((size( | |
873 | + | @Callable(dI) | |
874 | + | func craftGoods (ef,eg) = { | |
875 | + | let dO = cQ() | |
876 | + | if ((dO == dO)) | |
877 | + | then if ((size(dI.payments) != 1)) | |
645 | 878 | then throw("exactly 1 payment must be attached") | |
646 | 879 | else { | |
647 | - | let | |
648 | - | let | |
649 | - | let | |
650 | - | if (( | |
880 | + | let dX = dI.payments[0] | |
881 | + | let dY = dX.amount | |
882 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
883 | + | if ((dZ != b)) | |
651 | 884 | then throw("USDT payments only!") | |
652 | - | else if (( | |
885 | + | else if ((dY != g)) | |
653 | 886 | then throw("exactly 1 USDT must be attached as payment") | |
654 | - | else if ((0 >= | |
887 | + | else if ((0 >= eg)) | |
655 | 888 | then throw("Quantity should be positive") | |
656 | 889 | else { | |
657 | - | let | |
658 | - | let | |
659 | - | if (( | |
660 | - | then throw(("Duck location type should be Manufactory, but is " + | |
890 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
891 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
892 | + | if ((dP[bq] != "M")) | |
893 | + | then throw(("Duck location type should be Manufactory, but is " + dP[bq])) | |
661 | 894 | else { | |
662 | - | let | |
663 | - | let | |
664 | - | let | |
665 | - | if (if ((0 > | |
895 | + | let eh = dP[bp] | |
896 | + | let dQ = cO(bf(bg)) | |
897 | + | let ea = split(dQ[ak], "_") | |
898 | + | if (if ((0 > ef)) | |
666 | 899 | then true | |
667 | - | else ( | |
668 | - | then throw(("Unknown product idx=" + toString( | |
900 | + | else (ef >= size(G))) | |
901 | + | then throw(("Unknown product idx=" + toString(ef))) | |
669 | 902 | else { | |
670 | - | let | |
671 | - | if ((size( | |
672 | - | then throw(("Fatal: unknown recipe: " + | |
903 | + | let ca = split(G[ef], "_") | |
904 | + | if ((size(ca) != (n + 3))) | |
905 | + | then throw(("Fatal: unknown recipe: " + G[ef])) | |
673 | 906 | else { | |
674 | - | let | |
675 | - | if (( | |
676 | - | then throw(((("This product is available in " + | |
907 | + | let ei = parseIntValue(ca[U]) | |
908 | + | if ((F[ei] != eh)) | |
909 | + | then throw(((("This product is available in " + F[ei]) + ", but you are in ") + eh)) | |
677 | 910 | else { | |
678 | - | let | |
911 | + | let ej = if ((dQ[al] == "")) | |
679 | 912 | then nil | |
680 | - | else split( | |
681 | - | func | |
682 | - | let | |
683 | - | let | |
684 | - | then | |
913 | + | else split(dQ[al], "_") | |
914 | + | func ek (bI,el) = { | |
915 | + | let bw = bI._2 | |
916 | + | let em = if ((size(ej) > bw)) | |
917 | + | then ej[bw] | |
685 | 918 | else "0" | |
686 | - | let | |
687 | - | let | |
688 | - | let | |
689 | - | then toString(( | |
690 | - | else | |
691 | - | $Tuple2(( | |
919 | + | let en = parseIntValue(em) | |
920 | + | let cu = (eg * parseIntValue(ca[T])) | |
921 | + | let eo = if ((bw == ef)) | |
922 | + | then toString((en + cu)) | |
923 | + | else em | |
924 | + | $Tuple2((bI._1 :+ eo), (bw + 1)) | |
692 | 925 | } | |
693 | 926 | ||
694 | - | let | |
695 | - | let | |
696 | - | let | |
697 | - | func | |
698 | - | then | |
699 | - | else | |
927 | + | let ep = ( let bL = G | |
928 | + | let bM = size(bL) | |
929 | + | let bN = $Tuple2(nil, 0) | |
930 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
931 | + | then bP | |
932 | + | else ek(bP, bL[bQ]) | |
700 | 933 | ||
701 | - | func | |
702 | - | then | |
934 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
935 | + | then bP | |
703 | 936 | else throw("List size exceeds 50") | |
704 | 937 | ||
705 | - | | |
706 | - | func | |
707 | - | let | |
708 | - | let | |
709 | - | if (( | |
710 | - | then throw(((((((("You have " + | |
711 | - | else if (( | |
712 | - | then ( | |
713 | - | else ( | |
938 | + | bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._1 | |
939 | + | func eq (bI,cd) = { | |
940 | + | let er = ((parseIntValue(ca[cd]) * h) * eg) | |
941 | + | let es = parseIntValue(ea[cd]) | |
942 | + | if ((er > es)) | |
943 | + | then throw(((((((("You have " + ea[cd]) + " of ") + D[cd]) + ", but recipe requires ") + toString(er)) + " for quantity ") + toString(eg))) | |
944 | + | else if ((er > 0)) | |
945 | + | then (bI :+ toString((es - er))) | |
946 | + | else (bI :+ ea[cd]) | |
714 | 947 | } | |
715 | 948 | ||
716 | - | let | |
717 | - | let | |
718 | - | let | |
719 | - | let | |
720 | - | func | |
721 | - | then | |
722 | - | else | |
949 | + | let dT = { | |
950 | + | let bL = [0, 1, 2, 3, 4, 5] | |
951 | + | let bM = size(bL) | |
952 | + | let bN = nil | |
953 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
954 | + | then bP | |
955 | + | else eq(bP, bL[bQ]) | |
723 | 956 | ||
724 | - | func | |
725 | - | then | |
957 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
958 | + | then bP | |
726 | 959 | else throw("List size exceeds 6") | |
727 | 960 | ||
728 | - | | |
961 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
729 | 962 | } | |
730 | - | let | |
731 | - | let | |
732 | - | $Tuple2(nil, | |
963 | + | let dU = makeString([dQ[ai], dQ[aj], makeString(dT, "_"), makeString(ep, "_")], ":") | |
964 | + | let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil)) | |
965 | + | $Tuple2(nil, dV) | |
733 | 966 | } | |
734 | 967 | } | |
735 | 968 | } | |
741 | 974 | ||
742 | 975 | ||
743 | 976 | ||
744 | - | @Callable( | |
745 | - | func setWarehouseOrder ( | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | then | |
977 | + | @Callable(dI) | |
978 | + | func setWarehouseOrder (et,aW) = { | |
979 | + | let eu = dI.originCaller | |
980 | + | let aK = toString(eu) | |
981 | + | let dV = if ((eu != aE)) | |
982 | + | then cQ() | |
750 | 983 | else false | |
751 | - | let | |
752 | - | if (!(isDefined(getInteger( | |
753 | - | then throw((("NFT " + | |
984 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
985 | + | if (!(isDefined(getInteger(aF, aO(aW))))) | |
986 | + | then throw((("NFT " + bW.name) + " is not staked")) | |
754 | 987 | else { | |
755 | - | let | |
756 | - | if (if (( | |
757 | - | then ( | |
988 | + | let ev = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + bW.name) + " is orphaned")) | |
989 | + | if (if ((eu != aE)) | |
990 | + | then (ev != aK) | |
758 | 991 | else false) | |
759 | - | then throw(( | |
992 | + | then throw((k + " is not yours")) | |
760 | 993 | else { | |
761 | - | let | |
762 | - | let | |
763 | - | let | |
764 | - | let | |
765 | - | let | |
766 | - | let | |
767 | - | let | |
768 | - | let | |
769 | - | let | |
770 | - | let | |
771 | - | let | |
772 | - | let | |
773 | - | let | |
774 | - | if ((0 > | |
775 | - | then throw((((("Attempt to reserve " + toString( | |
994 | + | let ew = split_4C(et, ":") | |
995 | + | let dJ = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil)) | |
996 | + | let dg = split_4C(dJ, ":") | |
997 | + | let ex = split(dg[ad], "_") | |
998 | + | let ey = parseIntValue(ex[af]) | |
999 | + | let ez = parseIntValue(ex[ah]) | |
1000 | + | let cr = bn(aW) | |
1001 | + | let dh = cq(cr) | |
1002 | + | let dK = df(dg, dh, ew) | |
1003 | + | let eA = dK._4 | |
1004 | + | let eB = dK._5 | |
1005 | + | let eC = (eA + eB) | |
1006 | + | let eD = ((ez - ey) - eC) | |
1007 | + | if ((0 > eD)) | |
1008 | + | then throw((((((("Attempt to reserve " + toString(eA)) + " space for buy orders, and ") + toString(eB)) + " space for sell orders (and occupied=") + toString(ey)) + "), leads to negative free space")) | |
776 | 1009 | else { | |
777 | - | let | |
778 | - | let | |
779 | - | let | |
780 | - | let | |
781 | - | then if ((size( | |
1010 | + | let eE = makeString_2C([dg[Z], makeString(dK._1, "_"), makeString(dK._2, "_"), makeString(dK._3, "_"), toString(eC)], ":") | |
1011 | + | let eF = bs(invoke(aF, "saveWarehouse", [eE, aW], nil)) | |
1012 | + | let eG = dK._6 | |
1013 | + | let eH = if ((eG > 0)) | |
1014 | + | then if ((size(dI.payments) != 1)) | |
782 | 1015 | then throw("exactly 1 payment must be attached") | |
783 | 1016 | else { | |
784 | - | let | |
785 | - | let | |
786 | - | let | |
787 | - | if (( | |
1017 | + | let dX = dI.payments[0] | |
1018 | + | let dY = dX.amount | |
1019 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
1020 | + | if ((dZ != b)) | |
788 | 1021 | then throw("USDT payments only!") | |
789 | - | else if (( | |
790 | - | then throw(("Payment needed is " + toString( | |
791 | - | else [StringEntry( | |
1022 | + | else if ((dY != eG)) | |
1023 | + | then throw(("Payment needed is " + toString(eG))) | |
1024 | + | else [StringEntry(cr, et)] | |
792 | 1025 | } | |
793 | - | else if (( | |
794 | - | then if ((size( | |
1026 | + | else if ((eG == 0)) | |
1027 | + | then if ((size(dI.payments) != 0)) | |
795 | 1028 | then throw("No payments needed") | |
796 | - | else [StringEntry( | |
797 | - | else if ((size( | |
1029 | + | else [StringEntry(cr, et)] | |
1030 | + | else if ((size(dI.payments) != 0)) | |
798 | 1031 | then throw("No payments needed") | |
799 | - | else [ScriptTransfer(addressFromStringValue( | |
800 | - | $Tuple2( | |
1032 | + | else [ScriptTransfer(addressFromStringValue(ev), -(eG), b), StringEntry(cr, et)] | |
1033 | + | $Tuple2(eH, $Tuple2(dV, eF)) | |
801 | 1034 | } | |
802 | 1035 | } | |
803 | 1036 | } | |
805 | 1038 | ||
806 | 1039 | ||
807 | 1040 | ||
808 | - | @Callable( | |
809 | - | func acceptWarehouseOrder ( | |
810 | - | let | |
811 | - | let | |
812 | - | let | |
813 | - | let | |
814 | - | let | |
815 | - | let | |
816 | - | if (( | |
817 | - | then throw((("Duck location type is " + | |
818 | - | else if (( | |
819 | - | then throw(((("Your staked duck is " + | |
1041 | + | @Callable(dI) | |
1042 | + | func acceptWarehouseOrder (eI,aW,bg) = { | |
1043 | + | let dO = cQ() | |
1044 | + | let eJ = dI.originCaller | |
1045 | + | let eK = toString(eJ) | |
1046 | + | let eL = valueOrErrorMessage(getString(aF, be(eK)), "You don't have a duck staked") | |
1047 | + | let dP = valueOrElse(getString(aF, bh(eL)), w) | |
1048 | + | let eM = split(value(dP), "_") | |
1049 | + | if ((eM[bq] != "L")) | |
1050 | + | then throw((("Duck location type is " + eM[bq]) + ", but should be L")) | |
1051 | + | else if ((eL != bg)) | |
1052 | + | then throw(((("Your staked duck is " + eL) + ", but passed ") + bg)) | |
820 | 1053 | else { | |
821 | - | let | |
822 | - | if (!(isDefined(getInteger( | |
823 | - | then throw((("NFT " + | |
1054 | + | let eN = value(assetInfo(fromBase58String(aW))) | |
1055 | + | if (!(isDefined(getInteger(aF, aO(aW))))) | |
1056 | + | then throw((("NFT " + eN.name) + " is not staked")) | |
824 | 1057 | else { | |
825 | - | let | |
826 | - | if (( | |
1058 | + | let eO = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + eN.name) + " is orphaned")) | |
1059 | + | if ((eO == eK)) | |
827 | 1060 | then throw("You cannot trade with yourself") | |
828 | 1061 | else { | |
829 | - | let | |
830 | - | if ((size( | |
1062 | + | let eP = split_4C(eI, ":") | |
1063 | + | if ((size(eP) != 3)) | |
831 | 1064 | then throw("bpOrderStr should contain exactly 2 ':' separators") | |
832 | 1065 | else { | |
833 | - | let | |
834 | - | let | |
835 | - | let | |
1066 | + | let eQ = split(eP[0], "_") | |
1067 | + | let eR = split(eP[1], "_") | |
1068 | + | let eS = if ((eP[2] == "")) | |
836 | 1069 | then nil | |
837 | - | else split( | |
838 | - | if ((size( | |
1070 | + | else split(eP[2], "_") | |
1071 | + | if ((size(eQ) != n)) | |
839 | 1072 | then throw("All 6 resources should be passed") | |
840 | - | else if ((size( | |
1073 | + | else if ((size(eR) != n)) | |
841 | 1074 | then throw("All 6 materials should be passed") | |
842 | 1075 | else { | |
843 | - | let | |
844 | - | let | |
845 | - | let | |
846 | - | let | |
847 | - | let | |
1076 | + | let dJ = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil)) | |
1077 | + | let dg = split_4C(dJ, ":") | |
1078 | + | let dj = split(dg[aa], "_") | |
1079 | + | let dk = split(dg[ab], "_") | |
1080 | + | let dl = if ((dg[ac] == "")) | |
848 | 1081 | then nil | |
849 | - | else split( | |
850 | - | let | |
851 | - | let | |
852 | - | let | |
853 | - | let | |
854 | - | let | |
855 | - | let | |
1082 | + | else split(dg[ac], "_") | |
1083 | + | let eT = parseIntValue(split(dg[ad], "_")[ae]) | |
1084 | + | let cP = bf(bg) | |
1085 | + | let dQ = cO(cP) | |
1086 | + | let eU = split(dQ[aj], "_") | |
1087 | + | let eV = split(dQ[ak], "_") | |
1088 | + | let eW = if ((dQ[al] == "")) | |
856 | 1089 | then nil | |
857 | - | else split( | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
1090 | + | else split(dQ[al], "_") | |
1091 | + | let cr = bn(aW) | |
1092 | + | let eX = cq(cr) | |
1093 | + | let eY = split(eX[cn], "_") | |
1094 | + | let eZ = split(eX[co], "_") | |
1095 | + | let fa = if ((eX[cp] == "")) | |
863 | 1096 | then nil | |
864 | - | else split( | |
865 | - | let | |
866 | - | let | |
867 | - | let | |
868 | - | let | |
869 | - | func | |
870 | - | then | |
871 | - | else | |
1097 | + | else split(eX[cp], "_") | |
1098 | + | let ds = { | |
1099 | + | let bL = eQ | |
1100 | + | let bM = size(bL) | |
1101 | + | let bN = $Tuple12(nil, nil, nil, 0, 0, 0, 0, eU, dj, eY, C, false) | |
1102 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
1103 | + | then bP | |
1104 | + | else dv(bP, bL[bQ]) | |
872 | 1105 | ||
873 | - | func | |
874 | - | then | |
1106 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
1107 | + | then bP | |
875 | 1108 | else throw("List size exceeds 6") | |
876 | 1109 | ||
877 | - | | |
1110 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
878 | 1111 | } | |
879 | - | let | |
880 | - | let | |
881 | - | let | |
882 | - | let | |
883 | - | func | |
884 | - | then | |
885 | - | else | |
1112 | + | let cL = { | |
1113 | + | let bL = eR | |
1114 | + | let bM = size(bL) | |
1115 | + | let bN = $Tuple12(nil, nil, nil, ds._4, ds._5, ds._6, 0, eV, dk, eZ, D, false) | |
1116 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
1117 | + | then bP | |
1118 | + | else dv(bP, bL[bQ]) | |
886 | 1119 | ||
887 | - | func | |
888 | - | then | |
1120 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
1121 | + | then bP | |
889 | 1122 | else throw("List size exceeds 6") | |
890 | 1123 | ||
891 | - | | |
1124 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
892 | 1125 | } | |
893 | - | let | |
1126 | + | let cs = if ((size(eS) != 0)) | |
894 | 1127 | then { | |
895 | - | let | |
896 | - | let | |
897 | - | let | |
898 | - | func | |
899 | - | then | |
900 | - | else | |
1128 | + | let bL = eS | |
1129 | + | let bM = size(bL) | |
1130 | + | let bN = $Tuple12(nil, nil, nil, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true) | |
1131 | + | func dt (bP,bQ) = if ((bQ >= bM)) | |
1132 | + | then bP | |
1133 | + | else dv(bP, bL[bQ]) | |
901 | 1134 | ||
902 | - | func | |
903 | - | then | |
1135 | + | func du (bP,bQ) = if ((bQ >= bM)) | |
1136 | + | then bP | |
904 | 1137 | else throw("List size exceeds 50") | |
905 | 1138 | ||
906 | - | | |
1139 | + | du(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
907 | 1140 | } | |
908 | - | else $Tuple12( | |
909 | - | let | |
910 | - | let | |
1141 | + | else $Tuple12(dl, fa, eW, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true) | |
1142 | + | let fb = cs._4 | |
1143 | + | let fc = if ((0 > (eT - fb))) | |
911 | 1144 | then 0 | |
912 | - | else ( | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | let | |
917 | - | let | |
918 | - | let | |
919 | - | let | |
920 | - | let | |
1145 | + | else (eT - fb) | |
1146 | + | let eE = makeString_2C([dg[Z], makeString(ds._1, "_"), makeString(cL._1, "_"), makeString(cs._1, "_"), toString(fc)], ":") | |
1147 | + | let fd = makeString_2C([makeString(ds._2, "_"), makeString(cL._2, "_"), makeString(cs._2, "_")], ":") | |
1148 | + | let fe = makeString_2C([dQ[ai], makeString(ds._3, "_"), makeString(cL._3, "_"), makeString(cs._3, "_")], ":") | |
1149 | + | let eF = bs(invoke(aF, "saveWarehouse", [eE, aW], nil)) | |
1150 | + | let ff = bs(invoke(aF, "updateBackpack", [bg, fe], nil)) | |
1151 | + | let eH = [StringEntry(cr, fd)] | |
1152 | + | let fg = cs._5 | |
1153 | + | let fh = if ((fg > 0)) | |
921 | 1154 | then { | |
922 | - | let | |
923 | - | let | |
924 | - | let | |
925 | - | if (isDefined( | |
926 | - | then ((( | |
927 | - | else (( | |
1155 | + | let fi = fraction(cs._5, ci, g) | |
1156 | + | let fj = bb(eK) | |
1157 | + | let fk = getString(aF, fj) | |
1158 | + | if (isDefined(fk)) | |
1159 | + | then (((eH :+ ScriptTransfer(eJ, (cs._5 - (3 * fi)), b)) :+ ScriptTransfer(aE, fi, b)) :+ ScriptTransfer(addressFromStringValue(value(fk)), fi, b)) | |
1160 | + | else ((eH :+ ScriptTransfer(eJ, (cs._5 - (3 * fi)), b)) :+ ScriptTransfer(aE, fi, b)) | |
928 | 1161 | } | |
929 | - | else | |
930 | - | let | |
931 | - | let | |
932 | - | then if ((size( | |
1162 | + | else eH | |
1163 | + | let fl = cs._6 | |
1164 | + | let fm = if ((fl > 0)) | |
1165 | + | then if ((size(dI.payments) != 1)) | |
933 | 1166 | then throw("exactly 1 payment must be attached") | |
934 | 1167 | else { | |
935 | - | let | |
936 | - | let | |
937 | - | let | |
938 | - | if (( | |
1168 | + | let dX = dI.payments[0] | |
1169 | + | let dY = dX.amount | |
1170 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
1171 | + | if ((dZ != b)) | |
939 | 1172 | then throw("USDT payments only!") | |
940 | - | else if (( | |
941 | - | then throw(("Payment needed is " + toString( | |
942 | - | else if (( | |
943 | - | then throw(("Payment should be at least " + toString( | |
1173 | + | else if ((dY != fl)) | |
1174 | + | then throw(("Payment needed is " + toString(fl))) | |
1175 | + | else if ((cj > dY)) | |
1176 | + | then throw(("Payment should be at least " + toString(cj))) | |
944 | 1177 | else { | |
945 | - | let | |
946 | - | let | |
947 | - | let | |
948 | - | if (isDefined( | |
949 | - | then ((( | |
950 | - | else (( | |
1178 | + | let fn = fraction(cs._6, ci, g) | |
1179 | + | let fj = bb(eO) | |
1180 | + | let fk = getString(aF, fj) | |
1181 | + | if (isDefined(fk)) | |
1182 | + | then (((fh :+ ScriptTransfer(addressFromStringValue(eO), (cs._6 - (3 * fn)), b)) :+ ScriptTransfer(aE, fn, b)) :+ ScriptTransfer(addressFromStringValue(value(fk)), fn, b)) | |
1183 | + | else ((fh :+ ScriptTransfer(addressFromStringValue(eO), (cs._6 - (3 * fn)), b)) :+ ScriptTransfer(aE, fn, b)) | |
951 | 1184 | } | |
952 | 1185 | } | |
953 | - | else if ((size( | |
1186 | + | else if ((size(dI.payments) != 0)) | |
954 | 1187 | then throw("No payments needed") | |
955 | - | else | |
956 | - | $Tuple2( | |
1188 | + | else fh | |
1189 | + | $Tuple2(fm, $Tuple3(dO, eF, ff)) | |
957 | 1190 | } | |
958 | 1191 | } | |
959 | 1192 | } | |
963 | 1196 | ||
964 | 1197 | ||
965 | 1198 | ||
966 | - | @Callable( | |
967 | - | func sellProductsToES ( | |
968 | - | let | |
969 | - | if (( | |
970 | - | then if ((size( | |
1199 | + | @Callable(dI) | |
1200 | + | func sellProductsToES (dM) = { | |
1201 | + | let dO = cQ() | |
1202 | + | if ((dO == dO)) | |
1203 | + | then if ((size(dI.payments) != 0)) | |
971 | 1204 | then throw("No payments needed") | |
972 | 1205 | else { | |
973 | - | let | |
974 | - | let | |
975 | - | if (( | |
976 | - | then throw(("Duck location type should be Airport, but is " + | |
1206 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
1207 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
1208 | + | if ((dP[bq] != "A")) | |
1209 | + | then throw(("Duck location type should be Airport, but is " + dP[bq])) | |
977 | 1210 | else { | |
978 | - | let | |
979 | - | let | |
1211 | + | let dQ = cO(bf(bg)) | |
1212 | + | let ej = if ((dQ[al] == "")) | |
980 | 1213 | then nil | |
981 | - | else split( | |
982 | - | let | |
983 | - | let | |
984 | - | let | |
985 | - | then split(value( | |
1214 | + | else split(dQ[al], "_") | |
1215 | + | let fo = bo() | |
1216 | + | let fp = getString(fo) | |
1217 | + | let fq = if (isDefined(fp)) | |
1218 | + | then split(value(fp), "_") | |
986 | 1219 | else nil | |
987 | - | func | |
988 | - | let | |
989 | - | let | |
990 | - | then | |
1220 | + | func fr (bI,fs) = { | |
1221 | + | let cd = bI._1 | |
1222 | + | let eg = if ((size(dM) > cd)) | |
1223 | + | then dM[cd] | |
991 | 1224 | else 0 | |
992 | - | if ((0 > | |
1225 | + | if ((0 > eg)) | |
993 | 1226 | then throw("Quantity cannot be negative") | |
994 | 1227 | else { | |
995 | - | let | |
996 | - | if ((size( | |
997 | - | then throw(("Fatal: unknown recipe: " + | |
1228 | + | let ca = split(fs, "_") | |
1229 | + | if ((size(ca) != (n + 3))) | |
1230 | + | then throw(("Fatal: unknown recipe: " + fs)) | |
998 | 1231 | else { | |
999 | - | let | |
1000 | - | let | |
1001 | - | let | |
1002 | - | then parseIntValue( | |
1232 | + | let ft = parseIntValue(ca[T]) | |
1233 | + | let fu = (y * ft) | |
1234 | + | let fv = if ((size(fq) > cd)) | |
1235 | + | then parseIntValue(fq[cd]) | |
1003 | 1236 | else 0 | |
1004 | - | let | |
1005 | - | if (( | |
1006 | - | then throw(((("Warehouse can buy only " + toString( | |
1237 | + | let fw = (fu - fv) | |
1238 | + | if ((eg > fw)) | |
1239 | + | then throw(((("Warehouse can buy only " + toString(fw)) + " of ") + E[cd])) | |
1007 | 1240 | else { | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | then parseIntValue( | |
1241 | + | let fx = bZ(ca) | |
1242 | + | let fy = fraction((fx * z), x, (10 * ft)) | |
1243 | + | let fz = if ((size(ej) > cd)) | |
1244 | + | then parseIntValue(ej[cd]) | |
1012 | 1245 | else 0 | |
1013 | - | if (( | |
1014 | - | then throw(((("You have only " + toString( | |
1015 | - | else $Tuple4(( | |
1246 | + | if ((eg > fz)) | |
1247 | + | then throw(((("You have only " + toString(fz)) + " of ") + E[cd])) | |
1248 | + | else $Tuple4((cd + 1), (bI._2 + (fy * eg)), (bI._3 :+ toString((fz - eg))), (bI._4 :+ toString((fv + eg)))) | |
1016 | 1249 | } | |
1017 | 1250 | } | |
1018 | 1251 | } | |
1019 | 1252 | } | |
1020 | 1253 | ||
1021 | - | let | |
1022 | - | let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | func | |
1026 | - | then | |
1027 | - | else | |
1254 | + | let dT = { | |
1255 | + | let bL = G | |
1256 | + | let bM = size(bL) | |
1257 | + | let bN = $Tuple4(0, 0, nil, nil) | |
1258 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
1259 | + | then bP | |
1260 | + | else fr(bP, bL[bQ]) | |
1028 | 1261 | ||
1029 | - | func | |
1030 | - | then | |
1262 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
1263 | + | then bP | |
1031 | 1264 | else throw("List size exceeds 50") | |
1032 | 1265 | ||
1033 | - | | |
1266 | + | bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1034 | 1267 | } | |
1035 | - | let | |
1036 | - | let | |
1037 | - | $Tuple2([StringEntry( | |
1268 | + | let fe = makeString_2C([dQ[ai], dQ[aj], dQ[ak], makeString(dT._3, "_")], ":") | |
1269 | + | let ff = bs(invoke(aF, "updateBackpack", [bg, fe], nil)) | |
1270 | + | $Tuple2([StringEntry(fo, makeString(dT._4, "_")), ScriptTransfer(dI.caller, dT._2, b)], ff) | |
1038 | 1271 | } | |
1039 | 1272 | } | |
1040 | 1273 | else throw("Strict value is not equal to itself.") | |
1042 | 1275 | ||
1043 | 1276 | ||
1044 | 1277 | ||
1045 | - | @Callable( | |
1046 | - | func updateEsStorage ( | |
1278 | + | @Callable(dI) | |
1279 | + | func updateEsStorage (fA) = if ((dI.caller != aF)) | |
1047 | 1280 | then throw("Permission denied") | |
1048 | - | else $Tuple2([StringEntry( | |
1281 | + | else $Tuple2([StringEntry(bo(), fA)], fA) | |
1049 | 1282 | ||
1050 | 1283 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = take(drop(this.bytes, 1), 1) | |
5 | 5 | ||
6 | 6 | let b = { | |
7 | 7 | let c = a | |
8 | 8 | if ((base58'2W' == c)) | |
9 | 9 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
10 | 10 | else if ((base58'2T' == c)) | |
11 | 11 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
12 | 12 | else throw("Unknown chain") | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | let d = { | |
16 | 16 | let c = a | |
17 | 17 | if ((base58'2W' == c)) | |
18 | 18 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
19 | 19 | else if ((base58'2T' == c)) | |
20 | 20 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
21 | 21 | else throw("Unknown chain") | |
22 | 22 | } | |
23 | 23 | ||
24 | - | let e = "__" | |
24 | + | let e = { | |
25 | + | let c = a | |
26 | + | if ((base58'2W' == c)) | |
27 | + | then 10000000000 | |
28 | + | else if ((base58'2T' == c)) | |
29 | + | then 100000000 | |
30 | + | else throw("Unknown chain") | |
31 | + | } | |
25 | 32 | ||
26 | - | let f = | |
33 | + | let f = "__" | |
27 | 34 | ||
28 | - | let g = | |
35 | + | let g = 1000000 | |
29 | 36 | ||
30 | - | let h = | |
37 | + | let h = 10000000 | |
31 | 38 | ||
32 | - | let i = | |
39 | + | let i = 100000000 | |
33 | 40 | ||
34 | - | let j = | |
41 | + | let j = 10000000000 | |
35 | 42 | ||
36 | - | let k = | |
43 | + | let k = "LAND" | |
37 | 44 | ||
38 | - | let l = " | |
45 | + | let l = "DUCK" | |
39 | 46 | ||
40 | - | let m = | |
47 | + | let m = "PRESALE" | |
41 | 48 | ||
42 | - | let n = | |
49 | + | let n = 6 | |
43 | 50 | ||
44 | - | let o = | |
51 | + | let o = 25 | |
45 | 52 | ||
46 | - | let p = | |
53 | + | let p = 100 | |
47 | 54 | ||
48 | - | let q = | |
55 | + | let q = 225 | |
49 | 56 | ||
50 | - | let r = | |
57 | + | let r = 400 | |
51 | 58 | ||
52 | - | let s = | |
59 | + | let s = 625 | |
53 | 60 | ||
54 | - | let t = | |
61 | + | let t = 3456000 | |
55 | 62 | ||
56 | - | let u = | |
63 | + | let u = 86400000 | |
57 | 64 | ||
58 | - | let v = | |
65 | + | let v = 10000000000 | |
59 | 66 | ||
60 | - | let w = | |
67 | + | let w = "Africa_F_Africa" | |
61 | 68 | ||
62 | - | let x = | |
69 | + | let x = 39637 | |
63 | 70 | ||
64 | - | let y = | |
71 | + | let y = 3 | |
65 | 72 | ||
66 | - | let z = | |
73 | + | let z = 4 | |
67 | 74 | ||
68 | - | let A = | |
75 | + | let A = 10 | |
69 | 76 | ||
70 | - | let B = | |
77 | + | let B = 100 | |
71 | 78 | ||
72 | - | let C = | |
79 | + | let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
73 | 80 | ||
74 | - | let D = | |
81 | + | let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
75 | 82 | ||
76 | - | let E = | |
83 | + | let E = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"] | |
77 | 84 | ||
78 | - | let F = | |
85 | + | let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
79 | 86 | ||
80 | - | let G = 2 | |
87 | + | let G = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
81 | 88 | ||
82 | - | let H = | |
89 | + | let H = 0 | |
83 | 90 | ||
84 | - | func I (J,K) = valueOrErrorMessage(getString(J, K), makeString(["mandatory ", toString(J), ".", K, " is not defined"], "")) | |
91 | + | let I = 1 | |
92 | + | ||
93 | + | let J = 2 | |
94 | + | ||
95 | + | let K = 3 | |
96 | + | ||
97 | + | let L = 4 | |
98 | + | ||
99 | + | let M = 0 | |
100 | + | ||
101 | + | let N = 1 | |
102 | + | ||
103 | + | let O = 2 | |
104 | + | ||
105 | + | let P = 3 | |
106 | + | ||
107 | + | let Q = 4 | |
108 | + | ||
109 | + | let R = 5 | |
110 | + | ||
111 | + | let S = 6 | |
112 | + | ||
113 | + | let T = 7 | |
114 | + | ||
115 | + | let U = 8 | |
116 | + | ||
117 | + | let V = 0 | |
118 | + | ||
119 | + | let W = 1 | |
120 | + | ||
121 | + | let X = 2 | |
122 | + | ||
123 | + | let Y = 3 | |
124 | + | ||
125 | + | let Z = 0 | |
126 | + | ||
127 | + | let aa = 1 | |
128 | + | ||
129 | + | let ab = 2 | |
130 | + | ||
131 | + | let ac = 3 | |
132 | + | ||
133 | + | let ad = 4 | |
134 | + | ||
135 | + | let ae = 0 | |
136 | + | ||
137 | + | let af = 1 | |
138 | + | ||
139 | + | let ag = 2 | |
140 | + | ||
141 | + | let ah = 3 | |
142 | + | ||
143 | + | let ai = 0 | |
144 | + | ||
145 | + | let aj = 1 | |
146 | + | ||
147 | + | let ak = 2 | |
148 | + | ||
149 | + | let al = 3 | |
150 | + | ||
151 | + | func am (an) = parseIntValue(split(G[an], "_")[T]) | |
85 | 152 | ||
86 | 153 | ||
87 | - | let L = 1 | |
88 | - | ||
89 | - | func M () = "%s__restConfig" | |
154 | + | func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], "")) | |
90 | 155 | ||
91 | 156 | ||
92 | - | func | |
157 | + | func ar (aq,as) = valueOrElse(getInteger(this, aq), as) | |
93 | 158 | ||
94 | 159 | ||
95 | - | func O (P) = split_4C(I(P, M()), e) | |
160 | + | let at = 1 | |
161 | + | ||
162 | + | let au = 2 | |
163 | + | ||
164 | + | let av = 3 | |
165 | + | ||
166 | + | let aw = 4 | |
167 | + | ||
168 | + | func ax () = "%s__restConfig" | |
96 | 169 | ||
97 | 170 | ||
98 | - | func | |
171 | + | func ay () = "%s__restAddr" | |
99 | 172 | ||
100 | 173 | ||
101 | - | let T = addressFromStringValue(valueOrElse(getString(this, N()), d)) | |
102 | - | ||
103 | - | let R = O(T) | |
104 | - | ||
105 | - | let U = Q(R, L) | |
106 | - | ||
107 | - | func V (W) = ("nftOwner_" + W) | |
174 | + | func az (aA) = split_4C(ao(aA, ax()), f) | |
108 | 175 | ||
109 | 176 | ||
110 | - | func | |
177 | + | func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD))) | |
111 | 178 | ||
112 | 179 | ||
113 | - | func Y (Z) = ("accRefBy_" + Z) | |
180 | + | let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d)) | |
181 | + | ||
182 | + | let aC = az(aE) | |
183 | + | ||
184 | + | let aF = aB(aC, at) | |
185 | + | ||
186 | + | let aG = aB(aC, au) | |
187 | + | ||
188 | + | let aH = aB(aC, av) | |
189 | + | ||
190 | + | let aI = aB(aC, aw) | |
191 | + | ||
192 | + | func aJ (aK) = ("lastTxIdByUser_" + aK) | |
114 | 193 | ||
115 | 194 | ||
116 | - | func | |
195 | + | func aL (aM) = ("nftOwner_" + aM) | |
117 | 196 | ||
118 | 197 | ||
119 | - | func | |
198 | + | func aN (aM) = ("landCustomNameByAssetId_" + aM) | |
120 | 199 | ||
121 | 200 | ||
122 | - | func | |
201 | + | func aO (aM) = ("stakedTime_" + aM) | |
123 | 202 | ||
124 | 203 | ||
125 | - | func | |
204 | + | func aP (aM) = ("infraLevel_" + aM) | |
126 | 205 | ||
127 | 206 | ||
128 | - | func | |
207 | + | func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_") | |
129 | 208 | ||
130 | 209 | ||
131 | - | func | |
210 | + | func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU) | |
132 | 211 | ||
133 | 212 | ||
134 | - | ||
213 | + | func aV (aW) = ("wareHouse_" + aW) | |
135 | 214 | ||
136 | - | let ak = 1 | |
137 | 215 | ||
138 | - | ||
216 | + | func aX (aU) = ("stakedLandsByOwner_" + aU) | |
139 | 217 | ||
140 | - | func am (an) = { | |
141 | - | let c = an | |
218 | + | ||
219 | + | func aY (aU) = ("stakedPiecesByOwner_" + aU) | |
220 | + | ||
221 | + | ||
222 | + | func aZ (aM) = ("duckCustomNameByAssetId_" + aM) | |
223 | + | ||
224 | + | ||
225 | + | func ba (aK) = ("accountCustomNameByAddr_" + aK) | |
226 | + | ||
227 | + | ||
228 | + | func bb (aK) = ("accRefBy_" + aK) | |
229 | + | ||
230 | + | ||
231 | + | func bc (aK) = ("accReferrals_" + aK) | |
232 | + | ||
233 | + | ||
234 | + | func bd (aM) = ("duckOwner_" + aM) | |
235 | + | ||
236 | + | ||
237 | + | func be (aU) = ("stakedDuckByOwner_" + aU) | |
238 | + | ||
239 | + | ||
240 | + | func bf (bg) = ("backPack_" + bg) | |
241 | + | ||
242 | + | ||
243 | + | func bh (bg) = ("duckLocation_" + bg) | |
244 | + | ||
245 | + | ||
246 | + | func bi (bg) = ("duckHealth_" + bg) | |
247 | + | ||
248 | + | ||
249 | + | func bj () = "resTypesProportions" | |
250 | + | ||
251 | + | ||
252 | + | func bk () = "contractsBlocked" | |
253 | + | ||
254 | + | ||
255 | + | func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm) | |
256 | + | ||
257 | + | ||
258 | + | func bn (aW) = ("landOrder_" + aW) | |
259 | + | ||
260 | + | ||
261 | + | func bo () = "emergencyWarehouseProducts" | |
262 | + | ||
263 | + | ||
264 | + | let bp = 0 | |
265 | + | ||
266 | + | let bq = 1 | |
267 | + | ||
268 | + | let br = 2 | |
269 | + | ||
270 | + | func bs (bt) = { | |
271 | + | let c = bt | |
142 | 272 | if ($isInstanceOf(c, "String")) | |
143 | 273 | then { | |
144 | - | let | |
145 | - | | |
274 | + | let bu = c | |
275 | + | bu | |
146 | 276 | } | |
147 | 277 | else throw("fail to cast into String") | |
148 | 278 | } | |
149 | 279 | ||
150 | 280 | ||
151 | - | func ap (aq) = { | |
152 | - | func ar (as,at) = (as + parseIntValue(aq[at])) | |
153 | - | ||
154 | - | let au = [0, 1, 2, 3, 4, 5] | |
155 | - | let av = size(au) | |
156 | - | let aw = 0 | |
157 | - | func ax (ay,az) = if ((az >= av)) | |
158 | - | then ay | |
159 | - | else ar(ay, au[az]) | |
160 | - | ||
161 | - | func aA (ay,az) = if ((az >= av)) | |
162 | - | then ay | |
163 | - | else throw("List size exceeds 6") | |
164 | - | ||
165 | - | aA(ax(ax(ax(ax(ax(ax(aw, 0), 1), 2), 3), 4), 5), 6) | |
281 | + | func bv (bt) = { | |
282 | + | let c = bt | |
283 | + | if ($isInstanceOf(c, "Int")) | |
284 | + | then { | |
285 | + | let bw = c | |
286 | + | bw | |
287 | + | } | |
288 | + | else throw("fail to cast into Int") | |
166 | 289 | } | |
167 | 290 | ||
168 | 291 | ||
169 | - | let aB = 10000000000 | |
170 | - | ||
171 | - | let aC = 200 | |
172 | - | ||
173 | - | let aD = 300 | |
174 | - | ||
175 | - | let aE = 10000 | |
176 | - | ||
177 | - | let aF = 100000 | |
178 | - | ||
179 | - | func aG (aH,aI) = ((("factoryWhByContinentAndRes_" + aH) + "_") + toString(aI)) | |
180 | - | ||
181 | - | ||
182 | - | let aJ = 0 | |
183 | - | ||
184 | - | let aK = 1 | |
185 | - | ||
186 | - | let aL = 2 | |
187 | - | ||
188 | - | func aM (aN) = { | |
189 | - | let aO = split(valueOrElse(getString(aN), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":") | |
190 | - | [if ((size(split(aO[aJ], "_")) == k)) | |
191 | - | then aO[aJ] | |
192 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aO[aK], "_")) == k)) | |
193 | - | then aO[aK] | |
194 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", aO[aL]] | |
292 | + | func bx (bt) = { | |
293 | + | let c = bt | |
294 | + | if ($isInstanceOf(c, "List[Any]")) | |
295 | + | then { | |
296 | + | let by = c | |
297 | + | by | |
298 | + | } | |
299 | + | else throw("fail to cast into List[Any]") | |
195 | 300 | } | |
196 | 301 | ||
197 | 302 | ||
198 | - | func aP (aQ,aR,aS) = if (aS) | |
199 | - | then { | |
200 | - | let aT = if ((aQ >= 0)) | |
201 | - | then (((aQ + aR) - 1) / aR) | |
202 | - | else -((((-(aQ) + aR) - 1) / aR)) | |
203 | - | (aT * h) | |
204 | - | } | |
205 | - | else aQ | |
206 | - | ||
207 | - | ||
208 | - | func aU (aV,aI,aQ,aW) = { | |
209 | - | let aX = aG(aV, aI) | |
210 | - | let aY = valueOrElse(getInteger(aX), 0) | |
211 | - | let aZ = if ((aY > aB)) | |
212 | - | then 0 | |
213 | - | else if (((aY + aQ) > aB)) | |
214 | - | then (aB - aY) | |
215 | - | else aQ | |
216 | - | let ba = (fraction(aZ, ((aC * m) - fraction(((100 * aY) + (50 * aZ)), m, aB)), i) + fraction((aQ - aZ), m, h)) | |
217 | - | let bb = (aW - (aW / 100)) | |
218 | - | if (((bb * aQ) > (ba * h))) | |
219 | - | then throw((((((((((("Actual price = " + toString(ba)) + " / ") + toString(aQ)) + " < minPrice = ") + toString(aW)) + ", (") + aV) + ", ") + p[aI]) + ")")) | |
220 | - | else $Tuple2(IntegerEntry(aX, (aY + aQ)), ba) | |
303 | + | func bz (bt) = { | |
304 | + | let c = bt | |
305 | + | if ($isInstanceOf(c, "Boolean")) | |
306 | + | then { | |
307 | + | let bu = c | |
308 | + | bu | |
309 | + | } | |
310 | + | else throw("fail to cast into Boolean") | |
221 | 311 | } | |
222 | 312 | ||
223 | 313 | ||
224 | - | func | |
225 | - | let | |
226 | - | | |
227 | - | | |
228 | - | | |
229 | - | | |
230 | - | | |
231 | - | | |
232 | - | | |
233 | - | | |
234 | - | if (( | |
235 | - | then | |
236 | - | else | |
314 | + | func bA (bB) = { | |
315 | + | let c = bB | |
316 | + | if (("S" == c)) | |
317 | + | then o | |
318 | + | else if (("M" == c)) | |
319 | + | then p | |
320 | + | else if (("L" == c)) | |
321 | + | then q | |
322 | + | else if (("XL" == c)) | |
323 | + | then r | |
324 | + | else if (("XXL" == c)) | |
325 | + | then s | |
326 | + | else throw("Unknown land size") | |
237 | 327 | } | |
238 | 328 | ||
239 | 329 | ||
240 | - | func bk (bl) = { | |
241 | - | let aO = split(valueOrElse(getString(U, bl), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
242 | - | [toString(valueOrElse(parseInt(aO[E]), 0)), if ((size(split(aO[F], "_")) == k)) | |
243 | - | then aO[F] | |
244 | - | else "0_0_0_0_0_0", if ((size(split(aO[G], "_")) == k)) | |
245 | - | then aO[G] | |
246 | - | else "0_0_0_0_0_0", aO[H]] | |
330 | + | let bC = 0 | |
331 | + | ||
332 | + | let bD = 1 | |
333 | + | ||
334 | + | func bE (bF) = { | |
335 | + | let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_") | |
336 | + | func bH (bI,bJ) = (bI + parseIntValue(bJ)) | |
337 | + | ||
338 | + | let bK = { | |
339 | + | let bL = bG | |
340 | + | let bM = size(bL) | |
341 | + | let bN = 0 | |
342 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
343 | + | then bP | |
344 | + | else bH(bP, bL[bQ]) | |
345 | + | ||
346 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
347 | + | then bP | |
348 | + | else throw("List size exceeds 6") | |
349 | + | ||
350 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
351 | + | } | |
352 | + | let bS = if ((bF == "")) | |
353 | + | then 0 | |
354 | + | else { | |
355 | + | let bT = getString(aF, aX(bF)) | |
356 | + | let bU = if (isDefined(bT)) | |
357 | + | then split_51C(value(bT), "_") | |
358 | + | else nil | |
359 | + | func bV (bI,aW) = { | |
360 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
361 | + | let bB = split(bW.description, "_")[W] | |
362 | + | (bI + bA(bB)) | |
363 | + | } | |
364 | + | ||
365 | + | let bL = bU | |
366 | + | let bM = size(bL) | |
367 | + | let bN = 0 | |
368 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
369 | + | then bP | |
370 | + | else bV(bP, bL[bQ]) | |
371 | + | ||
372 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
373 | + | then bP | |
374 | + | else throw("List size exceeds 100") | |
375 | + | ||
376 | + | bY(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
377 | + | } | |
378 | + | [bK, bS] | |
247 | 379 | } | |
248 | 380 | ||
249 | 381 | ||
250 | - | func bm () = if (valueOrElse(getBoolean(U, af()), false)) | |
382 | + | func bZ (ca) = { | |
383 | + | func cb (cc,cd) = (cc + parseIntValue(ca[cd])) | |
384 | + | ||
385 | + | let bL = [0, 1, 2, 3, 4, 5] | |
386 | + | let bM = size(bL) | |
387 | + | let bN = 0 | |
388 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
389 | + | then bP | |
390 | + | else cb(bP, bL[bQ]) | |
391 | + | ||
392 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
393 | + | then bP | |
394 | + | else throw("List size exceeds 6") | |
395 | + | ||
396 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
397 | + | } | |
398 | + | ||
399 | + | ||
400 | + | let ce = 10000000000 | |
401 | + | ||
402 | + | let cf = 10000 | |
403 | + | ||
404 | + | let cg = 200 | |
405 | + | ||
406 | + | let ch = 300 | |
407 | + | ||
408 | + | let ci = 10000 | |
409 | + | ||
410 | + | let cj = 100000 | |
411 | + | ||
412 | + | func ck (cl,cm) = ((("factoryWhByContinentAndRes_" + cl) + "_") + toString(cm)) | |
413 | + | ||
414 | + | ||
415 | + | let cn = 0 | |
416 | + | ||
417 | + | let co = 1 | |
418 | + | ||
419 | + | let cp = 2 | |
420 | + | ||
421 | + | func cq (cr) = { | |
422 | + | let cs = split(valueOrElse(getString(cr), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":") | |
423 | + | [if ((size(split(cs[cn], "_")) == n)) | |
424 | + | then cs[cn] | |
425 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(cs[co], "_")) == n)) | |
426 | + | then cs[co] | |
427 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", cs[cp]] | |
428 | + | } | |
429 | + | ||
430 | + | ||
431 | + | func ct (cu,cv,cw) = if (cw) | |
432 | + | then { | |
433 | + | let cx = if ((cu >= 0)) | |
434 | + | then (((cu + cv) - 1) / cv) | |
435 | + | else -((((-(cu) + cv) - 1) / cv)) | |
436 | + | (cx * i) | |
437 | + | } | |
438 | + | else cu | |
439 | + | ||
440 | + | ||
441 | + | func cy (cz,cm,cu,cA) = { | |
442 | + | let cB = ck(cz, cm) | |
443 | + | let cC = valueOrElse(getInteger(cB), 0) | |
444 | + | let cD = if ((cC > ce)) | |
445 | + | then 0 | |
446 | + | else if (((cC + cu) > ce)) | |
447 | + | then (ce - cC) | |
448 | + | else cu | |
449 | + | let cE = (fraction(cD, ((cg * x) - fraction(((100 * cC) + (50 * cD)), x, ce)), j) + fraction((cu - cD), x, i)) | |
450 | + | let cF = (cA - (cA / 100)) | |
451 | + | if (((cF * cu) > (cE * i))) | |
452 | + | then throw((((((((((("Actual price = " + toString(cE)) + " / ") + toString(cu)) + " < minPrice = ") + toString(cA)) + ", (") + cz) + ", ") + C[cm]) + ")")) | |
453 | + | else $Tuple2(IntegerEntry(cB, (cC + cu)), cE) | |
454 | + | } | |
455 | + | ||
456 | + | ||
457 | + | func cG (cz,cH,cu,cI) = { | |
458 | + | let cB = ck(cz, cH) | |
459 | + | let cC = valueOrElse(getInteger(cB), 0) | |
460 | + | let cJ = if ((cC > ce)) | |
461 | + | then min([cu, (cC - ce)]) | |
462 | + | else 0 | |
463 | + | let cK = min([cC, (cu - cJ)]) | |
464 | + | let cL = (cK + cJ) | |
465 | + | let cM = (fraction(cK, ((ch * x) - fraction(((100 * cC) - (50 * cK)), x, ce)), j) + fraction(cJ, (2 * x), i)) | |
466 | + | let cN = (cI + (cI / 100)) | |
467 | + | if (((cM * i) > (cN * cL))) | |
468 | + | then throw((((((((((("Actual price = " + toString(cM)) + " / ") + toString(cL)) + " > maxPrice = ") + toString(cI)) + ", (") + cz) + ", ") + D[cH]) + ")")) | |
469 | + | else $Tuple3(IntegerEntry(cB, (cC - cL)), cM, cL) | |
470 | + | } | |
471 | + | ||
472 | + | ||
473 | + | func cO (cP) = { | |
474 | + | let cs = split(valueOrElse(getString(aF, cP), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
475 | + | [toString(valueOrElse(parseInt(cs[ai]), 0)), if ((size(split(cs[aj], "_")) == n)) | |
476 | + | then cs[aj] | |
477 | + | else "0_0_0_0_0_0", if ((size(split(cs[ak], "_")) == n)) | |
478 | + | then cs[ak] | |
479 | + | else "0_0_0_0_0_0", cs[al]] | |
480 | + | } | |
481 | + | ||
482 | + | ||
483 | + | func cQ () = if (valueOrElse(getBoolean(aF, bk()), false)) | |
251 | 484 | then throw("Contracts are under maintenance") | |
252 | 485 | else unit | |
253 | 486 | ||
254 | 487 | ||
255 | - | func | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | then parseIntValue(split( | |
488 | + | func cR (bI,bJ) = { | |
489 | + | let cd = bI._1 | |
490 | + | let cS = bI._8 | |
491 | + | let cv = if (cS) | |
492 | + | then parseIntValue(split(G[cd], "_")[T]) | |
260 | 493 | else 0 | |
261 | - | let | |
262 | - | if ((size( | |
494 | + | let cT = split(bJ, "@") | |
495 | + | if ((size(cT) != 2)) | |
263 | 496 | then throw("Incorrect order format, should be amount@price") | |
264 | 497 | else { | |
265 | - | let | |
266 | - | let | |
267 | - | let | |
268 | - | let | |
269 | - | let | |
270 | - | then parseIntValue( | |
498 | + | let cU = parseIntValue(cT[0]) | |
499 | + | let cV = parseIntValue(cT[1]) | |
500 | + | let cW = fraction(cU, cV, i) | |
501 | + | let cX = ct(cU, cv, cS) | |
502 | + | let cY = if ((size(bI._6) > cd)) | |
503 | + | then parseIntValue(bI._6[cd]) | |
271 | 504 | else 0 | |
272 | - | let | |
273 | - | then | |
505 | + | let cZ = split(if ((size(bI._7) > cd)) | |
506 | + | then bI._7[cd] | |
274 | 507 | else "0@0", "@") | |
275 | - | let | |
276 | - | let | |
277 | - | if (if ((0 > | |
508 | + | let da = parseIntValue(cZ[0]) | |
509 | + | let db = parseIntValue(cZ[1]) | |
510 | + | if (if ((0 > db)) | |
278 | 511 | then true | |
279 | - | else (0 > | |
512 | + | else (0 > cV)) | |
280 | 513 | then throw("Price can't be negative") | |
281 | 514 | else { | |
282 | - | let | |
283 | - | let | |
284 | - | if (( | |
285 | - | then if (( | |
286 | - | then $Tuple8(( | |
287 | - | else $Tuple8(( | |
288 | - | else if (( | |
289 | - | then if ((0 > | |
290 | - | then $Tuple8(( | |
291 | - | else $Tuple8(( | |
292 | - | else if ((0 > | |
515 | + | let dc = fraction(da, db, i) | |
516 | + | let dd = ct(da, cv, cS) | |
517 | + | if ((cU == 0)) | |
518 | + | then if ((da > 0)) | |
519 | + | then $Tuple8((cd + 1), (bI._2 :+ toString(cY)), bI._3, bI._4, (bI._5 - dc), bI._6, bI._7, cS) | |
520 | + | else $Tuple8((cd + 1), (bI._2 :+ toString((cY - da))), bI._3, bI._4, bI._5, bI._6, bI._7, cS) | |
521 | + | else if ((cU > 0)) | |
522 | + | then if ((0 > da)) | |
523 | + | then $Tuple8((cd + 1), (bI._2 :+ toString((cY - da))), (bI._3 + cX), bI._4, (bI._5 + cW), bI._6, bI._7, cS) | |
524 | + | else $Tuple8((cd + 1), (bI._2 :+ toString(cY)), (bI._3 + cX), bI._4, ((bI._5 + cW) - dc), bI._6, bI._7, cS) | |
525 | + | else if ((0 > da)) | |
293 | 526 | then { | |
294 | - | let | |
295 | - | if ((0 > ( | |
296 | - | then throw((((("Attempt to take " + toString( | |
297 | - | else $Tuple8(( | |
527 | + | let de = (da - cU) | |
528 | + | if ((0 > (cY - de))) | |
529 | + | then throw((((("Attempt to take " + toString(de)) + " from warehouse, but only ") + toString(cY)) + " available")) | |
530 | + | else $Tuple8((cd + 1), (bI._2 :+ toString((cY - de))), bI._3, (bI._4 - cX), bI._5, bI._6, bI._7, cS) | |
298 | 531 | } | |
299 | - | else if ((0 > ( | |
300 | - | then throw((((("Attempt to take " + toString(-( | |
301 | - | else $Tuple8(( | |
532 | + | else if ((0 > (cY + cU))) | |
533 | + | then throw((((("Attempt to take " + toString(-(cU))) + " from warehouse, but only ") + toString(cY)) + " available")) | |
534 | + | else $Tuple8((cd + 1), (bI._2 :+ toString((cY + cU))), bI._3, (bI._4 - cX), (bI._5 - dc), bI._6, bI._7, cS) | |
302 | 535 | } | |
303 | 536 | } | |
304 | 537 | } | |
305 | 538 | ||
306 | 539 | ||
307 | - | func | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
540 | + | func df (dg,dh,di) = { | |
541 | + | let dj = split(dg[aa], "_") | |
542 | + | let dk = split(dg[ab], "_") | |
543 | + | let dl = if ((dg[ac] == "")) | |
311 | 544 | then nil | |
312 | - | else split( | |
313 | - | let | |
314 | - | let | |
315 | - | let | |
545 | + | else split(dg[ac], "_") | |
546 | + | let dm = split(dh[cn], "_") | |
547 | + | let dn = split(dh[co], "_") | |
548 | + | let do = if ((dh[cp] == "")) | |
316 | 549 | then nil | |
317 | - | else split( | |
318 | - | if ((size( | |
550 | + | else split(dh[cp], "_") | |
551 | + | if ((size(di) != 3)) | |
319 | 552 | then throw("newOrderStr should contain exactly 2 ':' separators") | |
320 | 553 | else { | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
554 | + | let dp = split(di[0], "_") | |
555 | + | let dq = split(di[1], "_") | |
556 | + | let dr = if ((di[2] == "")) | |
324 | 557 | then nil | |
325 | - | else split( | |
326 | - | if ((size( | |
558 | + | else split(di[2], "_") | |
559 | + | if ((size(dp) != n)) | |
327 | 560 | then throw("All 6 resources should be passed") | |
328 | - | else if ((size( | |
561 | + | else if ((size(dq) != n)) | |
329 | 562 | then throw("All 6 materials should be passed") | |
330 | 563 | else { | |
331 | - | let | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | func | |
336 | - | then | |
337 | - | else | |
564 | + | let ds = { | |
565 | + | let bL = dp | |
566 | + | let bM = size(bL) | |
567 | + | let bN = $Tuple8(0, nil, 0, 0, 0, dj, dm, false) | |
568 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
569 | + | then bP | |
570 | + | else cR(bP, bL[bQ]) | |
338 | 571 | ||
339 | - | func | |
340 | - | then | |
572 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
573 | + | then bP | |
341 | 574 | else throw("List size exceeds 6") | |
342 | 575 | ||
343 | - | | |
576 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
344 | 577 | } | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | func | |
350 | - | then | |
351 | - | else | |
578 | + | let cL = { | |
579 | + | let bL = dq | |
580 | + | let bM = size(bL) | |
581 | + | let bN = $Tuple8(0, nil, ds._3, ds._4, ds._5, dk, dn, false) | |
582 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
583 | + | then bP | |
584 | + | else cR(bP, bL[bQ]) | |
352 | 585 | ||
353 | - | func | |
354 | - | then | |
586 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
587 | + | then bP | |
355 | 588 | else throw("List size exceeds 6") | |
356 | 589 | ||
357 | - | | |
590 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
358 | 591 | } | |
359 | - | let | |
592 | + | let cs = if ((size(dr) != 0)) | |
360 | 593 | then { | |
361 | - | let | |
362 | - | let | |
363 | - | let | |
364 | - | func | |
365 | - | then | |
366 | - | else | |
594 | + | let bL = dr | |
595 | + | let bM = size(bL) | |
596 | + | let bN = $Tuple8(0, nil, cL._3, cL._4, cL._5, dl, do, true) | |
597 | + | func dt (bP,bQ) = if ((bQ >= bM)) | |
598 | + | then bP | |
599 | + | else cR(bP, bL[bQ]) | |
367 | 600 | ||
368 | - | func | |
369 | - | then | |
601 | + | func du (bP,bQ) = if ((bQ >= bM)) | |
602 | + | then bP | |
370 | 603 | else throw("List size exceeds 50") | |
371 | 604 | ||
372 | - | | |
605 | + | du(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
373 | 606 | } | |
374 | - | else $Tuple8(0, | |
375 | - | $Tuple6( | |
607 | + | else $Tuple8(0, dl, cL._3, cL._4, cL._5, dl, do, true) | |
608 | + | $Tuple6(ds._2, cL._2, cs._2, cs._3, cs._4, cs._5) | |
376 | 609 | } | |
377 | 610 | } | |
378 | 611 | } | |
379 | 612 | ||
380 | 613 | ||
381 | - | func | |
382 | - | let | |
383 | - | let | |
384 | - | let | |
385 | - | then parseIntValue(split( | |
614 | + | func dv (bI,dw) = { | |
615 | + | let cd = bI._7 | |
616 | + | let cS = bI._12 | |
617 | + | let cv = if (cS) | |
618 | + | then parseIntValue(split(G[cd], "_")[T]) | |
386 | 619 | else 0 | |
387 | - | let | |
388 | - | if ((size( | |
620 | + | let dx = split(dw, "@") | |
621 | + | if ((size(dx) != 2)) | |
389 | 622 | then throw("Incorrect order format, should be amount@price") | |
390 | 623 | else { | |
391 | - | let | |
392 | - | let | |
393 | - | if ((0 > | |
624 | + | let dy = parseIntValue(dx[0]) | |
625 | + | let dz = parseIntValue(dx[1]) | |
626 | + | if ((0 > dz)) | |
394 | 627 | then throw("Price can't be negative") | |
395 | 628 | else { | |
396 | - | let | |
397 | - | let | |
398 | - | then parseIntValue( | |
629 | + | let dA = fraction(dy, dz, i) | |
630 | + | let dB = if ((size(bI._8) > cd)) | |
631 | + | then parseIntValue(bI._8[cd]) | |
399 | 632 | else 0 | |
400 | - | let | |
401 | - | then parseIntValue( | |
633 | + | let cY = if ((size(bI._9) > cd)) | |
634 | + | then parseIntValue(bI._9[cd]) | |
402 | 635 | else 0 | |
403 | - | let | |
404 | - | then | |
636 | + | let dC = if ((size(bI._10) > cd)) | |
637 | + | then bI._10[cd] | |
405 | 638 | else "0@0" | |
406 | - | let | |
407 | - | let | |
408 | - | let | |
409 | - | if (if (( | |
410 | - | then ( | |
639 | + | let dD = split(dC, "@") | |
640 | + | let dE = parseIntValue(dD[0]) | |
641 | + | let dF = parseIntValue(dD[1]) | |
642 | + | if (if ((dy != 0)) | |
643 | + | then (dz != dF) | |
411 | 644 | else false) | |
412 | - | then throw(((((("Prices of " + | |
645 | + | then throw(((((("Prices of " + bI._11[cd]) + " don't match! WH price=") + toString(dF)) + ", your price=") + toString(dz))) | |
413 | 646 | else { | |
414 | - | let | |
415 | - | let | |
416 | - | if (( | |
417 | - | then $Tuple12(( | |
418 | - | else if (( | |
419 | - | then if ((0 > | |
420 | - | then if (( | |
421 | - | then throw(((((("Attempt to buy " + toString( | |
422 | - | else $Tuple12(( | |
423 | - | else throw((("Attempt to buy " + | |
424 | - | else if (( | |
425 | - | then if ((-( | |
426 | - | then throw(((((("Attempt to sell " + toString(-( | |
427 | - | else if ((-( | |
428 | - | then throw(((((("Attempt to sell " + toString(-( | |
429 | - | else $Tuple12(( | |
430 | - | else throw((("Attempt to sell " + | |
647 | + | let dG = fraction(dE, dF, i) | |
648 | + | let dH = ct(dy, cv, cS) | |
649 | + | if ((dy == 0)) | |
650 | + | then $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ dC), (bI._3 :+ toString(dB)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS) | |
651 | + | else if ((dy > 0)) | |
652 | + | then if ((0 > dE)) | |
653 | + | then if ((dy > -(dE))) | |
654 | + | then throw(((((("Attempt to buy " + toString(dy)) + " of ") + bI._11[cd]) + ", but warehouse only sells ") + toString(-(dE)))) | |
655 | + | else $Tuple12((bI._1 :+ toString(cY)), (bI._2 :+ ((toString((dE + dy)) + "@") + toString(dF))), (bI._3 :+ toString((dB + dy))), (bI._4 + dH), bI._5, (bI._6 + dA), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS) | |
656 | + | else throw((("Attempt to buy " + bI._11[cd]) + " while warehouse doesn't sell it")) | |
657 | + | else if ((dE > 0)) | |
658 | + | then if ((-(dy) > dE)) | |
659 | + | then throw(((((("Attempt to sell " + toString(-(dy))) + " of ") + bI._11[cd]) + ", but warehouse only buys ") + toString(dE))) | |
660 | + | else if ((-(dy) > dB)) | |
661 | + | then throw(((((("Attempt to sell " + toString(-(dy))) + ", but you only have ") + toString(dB)) + " of ") + bI._11[cd])) | |
662 | + | else $Tuple12((bI._1 :+ toString((cY - dy))), (bI._2 :+ ((toString((dE + dy)) + "@") + toString(dF))), (bI._3 :+ toString((dB + dy))), (bI._4 - dH), (bI._5 - dA), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, cS) | |
663 | + | else throw((("Attempt to sell " + bI._11[cd]) + " while warehouse doesn't buy it")) | |
431 | 664 | } | |
432 | 665 | } | |
433 | 666 | } | |
434 | 667 | } | |
435 | 668 | ||
436 | 669 | ||
437 | - | @Callable( | |
438 | - | func recalcLockedVolumeREADONLY ( | |
439 | - | let | |
440 | - | let | |
441 | - | $Tuple2(nil, ( | |
670 | + | @Callable(dI) | |
671 | + | func recalcLockedVolumeREADONLY (aW,dJ) = { | |
672 | + | let dh = cq(bn(aW)) | |
673 | + | let dK = df(dJ, dh, dh) | |
674 | + | $Tuple2(nil, (dK._4 + dK._5)) | |
442 | 675 | } | |
443 | 676 | ||
444 | 677 | ||
445 | 678 | ||
446 | - | @Callable( | |
447 | - | func constructorV1 ( | |
679 | + | @Callable(dI) | |
680 | + | func constructorV1 (dL) = if ((dI.caller != this)) | |
448 | 681 | then throw("Permission denied") | |
449 | - | else [StringEntry( | |
682 | + | else [StringEntry(ay(), dL)] | |
450 | 683 | ||
451 | 684 | ||
452 | 685 | ||
453 | - | @Callable( | |
454 | - | func sellResources ( | |
455 | - | let | |
456 | - | if (( | |
686 | + | @Callable(dI) | |
687 | + | func sellResources (dM,dN) = { | |
688 | + | let dO = cQ() | |
689 | + | if ((dO == dO)) | |
457 | 690 | then { | |
458 | - | let | |
459 | - | if ((size( | |
691 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
692 | + | if ((size(dI.payments) != 0)) | |
460 | 693 | then throw("sellResources doesn't require any payments") | |
461 | 694 | else { | |
462 | - | let | |
463 | - | if (( | |
464 | - | then throw(("Duck location type should be Factory, but is " + | |
695 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
696 | + | if ((dP[bq] != "F")) | |
697 | + | then throw(("Duck location type should be Factory, but is " + dP[bq])) | |
465 | 698 | else { | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | func | |
470 | - | then throw(((((("You have " + | |
471 | - | else if ((0 > | |
472 | - | then throw(((("You tried to sell negative amount of " + | |
473 | - | else if (( | |
699 | + | let cz = dP[br] | |
700 | + | let dQ = cO(bf(bg)) | |
701 | + | let dR = split(dQ[aj], "_") | |
702 | + | func bH (bI,cd) = if ((dM[cd] > parseIntValue(dR[cd]))) | |
703 | + | then throw(((((("You have " + dR[cd]) + " of ") + C[cd]) + ", but tried to sell ") + toString(dM[cd]))) | |
704 | + | else if ((0 > dM[cd])) | |
705 | + | then throw(((("You tried to sell negative amount of " + C[cd]) + ": ") + toString(dM[cd]))) | |
706 | + | else if ((dM[cd] > 0)) | |
474 | 707 | then { | |
475 | - | let | |
476 | - | $Tuple3(( | |
708 | + | let dS = cy(cz, cd, dM[cd], dN[cd]) | |
709 | + | $Tuple3((bI._1 :+ dS._1), (bI._2 :+ toString((parseIntValue(dR[cd]) - dM[cd]))), (bI._3 + dS._2)) | |
477 | 710 | } | |
478 | - | else $Tuple3( | |
711 | + | else $Tuple3(bI._1, (bI._2 :+ dR[cd]), bI._3) | |
479 | 712 | ||
480 | - | let | |
481 | - | let | |
482 | - | let | |
483 | - | let | |
484 | - | func | |
485 | - | then | |
486 | - | else | |
713 | + | let dT = { | |
714 | + | let bL = [0, 1, 2, 3, 4, 5] | |
715 | + | let bM = size(bL) | |
716 | + | let bN = $Tuple3(nil, nil, 0) | |
717 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
718 | + | then bP | |
719 | + | else bH(bP, bL[bQ]) | |
487 | 720 | ||
488 | - | func | |
489 | - | then | |
721 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
722 | + | then bP | |
490 | 723 | else throw("List size exceeds 6") | |
491 | 724 | ||
492 | - | | |
725 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
493 | 726 | } | |
494 | - | let | |
495 | - | let | |
496 | - | $Tuple2(( | |
727 | + | let dU = makeString([dQ[ai], makeString(dT._2, "_"), dQ[ak], dQ[al]], ":") | |
728 | + | let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil)) | |
729 | + | $Tuple2((dT._1 :+ ScriptTransfer(dI.caller, dT._3, b)), dV) | |
497 | 730 | } | |
498 | 731 | } | |
499 | 732 | } | |
500 | 733 | else throw("Strict value is not equal to itself.") | |
501 | 734 | } | |
502 | 735 | ||
503 | 736 | ||
504 | 737 | ||
505 | - | @Callable( | |
506 | - | func buyMaterials ( | |
507 | - | let | |
508 | - | if (( | |
738 | + | @Callable(dI) | |
739 | + | func buyMaterials (dM,dW) = { | |
740 | + | let dO = cQ() | |
741 | + | if ((dO == dO)) | |
509 | 742 | then { | |
510 | - | let | |
511 | - | if ((size( | |
743 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
744 | + | if ((size(dI.payments) != 1)) | |
512 | 745 | then throw("exactly 1 payment must be attached") | |
513 | 746 | else { | |
514 | - | let | |
515 | - | let | |
516 | - | let | |
517 | - | if (( | |
747 | + | let dX = dI.payments[0] | |
748 | + | let dY = dX.amount | |
749 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
750 | + | if ((dZ != b)) | |
518 | 751 | then throw("USDT payments only!") | |
519 | 752 | else { | |
520 | - | let | |
521 | - | if (( | |
522 | - | then throw(("Duck location type should be Factory, but is " + | |
753 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
754 | + | if ((dP[bq] != "F")) | |
755 | + | then throw(("Duck location type should be Factory, but is " + dP[bq])) | |
523 | 756 | else { | |
524 | - | let | |
525 | - | let | |
526 | - | let | |
527 | - | func | |
528 | - | then throw(((("You tried to buy negative amount of " + | |
529 | - | else if (( | |
757 | + | let cz = dP[br] | |
758 | + | let dQ = cO(bf(bg)) | |
759 | + | let ea = split(dQ[ak], "_") | |
760 | + | func eb (bI,cd) = if ((0 > dM[cd])) | |
761 | + | then throw(((("You tried to buy negative amount of " + D[cd]) + ": ") + toString(dM[cd]))) | |
762 | + | else if ((dM[cd] > 0)) | |
530 | 763 | then { | |
531 | - | let | |
532 | - | $Tuple3(( | |
764 | + | let dS = cG(cz, cd, dM[cd], dW[cd]) | |
765 | + | $Tuple3((bI._1 :+ dS._1), (bI._2 :+ toString((parseIntValue(ea[cd]) + dS._3))), (bI._3 + dS._2)) | |
533 | 766 | } | |
534 | - | else $Tuple3( | |
767 | + | else $Tuple3(bI._1, (bI._2 :+ ea[cd]), bI._3) | |
535 | 768 | ||
536 | - | let | |
537 | - | let | |
538 | - | let | |
539 | - | let | |
540 | - | func | |
541 | - | then | |
542 | - | else | |
769 | + | let dT = { | |
770 | + | let bL = [0, 1, 2, 3, 4, 5] | |
771 | + | let bM = size(bL) | |
772 | + | let bN = $Tuple3(nil, nil, 0) | |
773 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
774 | + | then bP | |
775 | + | else eb(bP, bL[bQ]) | |
543 | 776 | ||
544 | - | func | |
545 | - | then | |
777 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
778 | + | then bP | |
546 | 779 | else throw("List size exceeds 6") | |
547 | 780 | ||
548 | - | | |
781 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
549 | 782 | } | |
550 | - | if (( | |
551 | - | then throw(((("Insufficient payment! Attached=" + toString( | |
783 | + | if ((dT._3 > dY)) | |
784 | + | then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3))) | |
552 | 785 | else { | |
553 | - | let | |
554 | - | let | |
555 | - | let | |
556 | - | then [ScriptTransfer( | |
786 | + | let dU = makeString([dQ[ai], dQ[aj], makeString(dT._2, "_"), dQ[al]], ":") | |
787 | + | let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil)) | |
788 | + | let aA = if (((dY - dT._3) > 0)) | |
789 | + | then [ScriptTransfer(dI.caller, (dY - dT._3), b)] | |
557 | 790 | else nil | |
558 | - | let | |
559 | - | $Tuple2((( | |
791 | + | let ec = (dT._3 / 100) | |
792 | + | $Tuple2(((dT._1 ++ aA) :+ ScriptTransfer(aE, ec, b)), dV) | |
560 | 793 | } | |
561 | 794 | } | |
562 | 795 | } | |
563 | 796 | } | |
564 | 797 | } | |
565 | 798 | else throw("Strict value is not equal to itself.") | |
566 | 799 | } | |
567 | 800 | ||
568 | 801 | ||
569 | 802 | ||
570 | - | @Callable( | |
571 | - | func exchangeResources ( | |
572 | - | let | |
573 | - | if (( | |
803 | + | @Callable(dI) | |
804 | + | func exchangeResources (dM) = { | |
805 | + | let dO = cQ() | |
806 | + | if ((dO == dO)) | |
574 | 807 | then { | |
575 | - | let | |
576 | - | if ((size( | |
808 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
809 | + | if ((size(dI.payments) != 1)) | |
577 | 810 | then throw("exactly 1 payment must be attached") | |
578 | 811 | else { | |
579 | - | let | |
580 | - | let | |
581 | - | let | |
582 | - | if (( | |
812 | + | let dX = dI.payments[0] | |
813 | + | let dY = dX.amount | |
814 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
815 | + | if ((dZ != b)) | |
583 | 816 | then throw("USDT payments only!") | |
584 | 817 | else { | |
585 | - | let | |
586 | - | if (( | |
587 | - | then throw(("Duck location type should be Factory, but is " + | |
818 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
819 | + | if ((dP[bq] != "F")) | |
820 | + | then throw(("Duck location type should be Factory, but is " + dP[bq])) | |
588 | 821 | else { | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | func | |
594 | - | let | |
595 | - | let | |
596 | - | let | |
597 | - | if (( | |
598 | - | then throw(((((("You have " + | |
599 | - | else if ((0 > | |
600 | - | then throw(((("You tried to exchange negative amount of " + | |
601 | - | else if (( | |
602 | - | then $Tuple4(( | |
603 | - | else $Tuple4(( | |
822 | + | let cz = dP[br] | |
823 | + | let dQ = cO(bf(bg)) | |
824 | + | let dR = split(dQ[aj], "_") | |
825 | + | let ea = split(dQ[ak], "_") | |
826 | + | func ed (bI,cd) = { | |
827 | + | let cB = ck(cz, cd) | |
828 | + | let cC = valueOrElse(getInteger(cB), 0) | |
829 | + | let ee = dM[cd] | |
830 | + | if ((ee > parseIntValue(dR[cd]))) | |
831 | + | then throw(((((("You have " + dR[cd]) + " of ") + C[cd]) + ", but tried to exchange ") + toString(ee))) | |
832 | + | else if ((0 > ee)) | |
833 | + | then throw(((("You tried to exchange negative amount of " + C[cd]) + ": ") + toString(ee))) | |
834 | + | else if ((ee > 0)) | |
835 | + | then $Tuple4((bI._1 :+ toString((parseIntValue(dR[cd]) - ee))), (bI._2 :+ toString((parseIntValue(ea[cd]) + ee))), (bI._3 + fraction(ee, x, i)), (bI._4 :+ IntegerEntry(cB, cC))) | |
836 | + | else $Tuple4((bI._1 :+ dR[cd]), (bI._2 :+ ea[cd]), bI._3, bI._4) | |
604 | 837 | } | |
605 | 838 | ||
606 | - | let | |
607 | - | let | |
608 | - | let | |
609 | - | let | |
610 | - | func | |
611 | - | then | |
612 | - | else | |
839 | + | let dT = { | |
840 | + | let bL = [0, 1, 2, 3, 4, 5] | |
841 | + | let bM = size(bL) | |
842 | + | let bN = $Tuple4(nil, nil, 0, nil) | |
843 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
844 | + | then bP | |
845 | + | else ed(bP, bL[bQ]) | |
613 | 846 | ||
614 | - | func | |
615 | - | then | |
847 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
848 | + | then bP | |
616 | 849 | else throw("List size exceeds 6") | |
617 | 850 | ||
618 | - | | |
851 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
619 | 852 | } | |
620 | - | if (( | |
621 | - | then throw(((("Insufficient payment! Attached=" + toString( | |
853 | + | if ((dT._3 > dY)) | |
854 | + | then throw(((("Insufficient payment! Attached=" + toString(dY)) + ", required=") + toString(dT._3))) | |
622 | 855 | else { | |
623 | - | let | |
624 | - | let | |
625 | - | let | |
626 | - | then [ScriptTransfer( | |
856 | + | let dU = makeString([dQ[ai], makeString(dT._1, "_"), makeString(dT._2, "_"), dQ[al]], ":") | |
857 | + | let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil)) | |
858 | + | let aA = if (((dY - dT._3) > 0)) | |
859 | + | then [ScriptTransfer(dI.caller, (dY - dT._3), b)] | |
627 | 860 | else nil | |
628 | - | let | |
629 | - | $Tuple2((( | |
861 | + | let ec = (dT._3 / 100) | |
862 | + | $Tuple2(((aA ++ dT._4) :+ ScriptTransfer(aE, ec, b)), dV) | |
630 | 863 | } | |
631 | 864 | } | |
632 | 865 | } | |
633 | 866 | } | |
634 | 867 | } | |
635 | 868 | else throw("Strict value is not equal to itself.") | |
636 | 869 | } | |
637 | 870 | ||
638 | 871 | ||
639 | 872 | ||
640 | - | @Callable( | |
641 | - | func craftGoods ( | |
642 | - | let | |
643 | - | if (( | |
644 | - | then if ((size( | |
873 | + | @Callable(dI) | |
874 | + | func craftGoods (ef,eg) = { | |
875 | + | let dO = cQ() | |
876 | + | if ((dO == dO)) | |
877 | + | then if ((size(dI.payments) != 1)) | |
645 | 878 | then throw("exactly 1 payment must be attached") | |
646 | 879 | else { | |
647 | - | let | |
648 | - | let | |
649 | - | let | |
650 | - | if (( | |
880 | + | let dX = dI.payments[0] | |
881 | + | let dY = dX.amount | |
882 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
883 | + | if ((dZ != b)) | |
651 | 884 | then throw("USDT payments only!") | |
652 | - | else if (( | |
885 | + | else if ((dY != g)) | |
653 | 886 | then throw("exactly 1 USDT must be attached as payment") | |
654 | - | else if ((0 >= | |
887 | + | else if ((0 >= eg)) | |
655 | 888 | then throw("Quantity should be positive") | |
656 | 889 | else { | |
657 | - | let | |
658 | - | let | |
659 | - | if (( | |
660 | - | then throw(("Duck location type should be Manufactory, but is " + | |
890 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
891 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
892 | + | if ((dP[bq] != "M")) | |
893 | + | then throw(("Duck location type should be Manufactory, but is " + dP[bq])) | |
661 | 894 | else { | |
662 | - | let | |
663 | - | let | |
664 | - | let | |
665 | - | if (if ((0 > | |
895 | + | let eh = dP[bp] | |
896 | + | let dQ = cO(bf(bg)) | |
897 | + | let ea = split(dQ[ak], "_") | |
898 | + | if (if ((0 > ef)) | |
666 | 899 | then true | |
667 | - | else ( | |
668 | - | then throw(("Unknown product idx=" + toString( | |
900 | + | else (ef >= size(G))) | |
901 | + | then throw(("Unknown product idx=" + toString(ef))) | |
669 | 902 | else { | |
670 | - | let | |
671 | - | if ((size( | |
672 | - | then throw(("Fatal: unknown recipe: " + | |
903 | + | let ca = split(G[ef], "_") | |
904 | + | if ((size(ca) != (n + 3))) | |
905 | + | then throw(("Fatal: unknown recipe: " + G[ef])) | |
673 | 906 | else { | |
674 | - | let | |
675 | - | if (( | |
676 | - | then throw(((("This product is available in " + | |
907 | + | let ei = parseIntValue(ca[U]) | |
908 | + | if ((F[ei] != eh)) | |
909 | + | then throw(((("This product is available in " + F[ei]) + ", but you are in ") + eh)) | |
677 | 910 | else { | |
678 | - | let | |
911 | + | let ej = if ((dQ[al] == "")) | |
679 | 912 | then nil | |
680 | - | else split( | |
681 | - | func | |
682 | - | let | |
683 | - | let | |
684 | - | then | |
913 | + | else split(dQ[al], "_") | |
914 | + | func ek (bI,el) = { | |
915 | + | let bw = bI._2 | |
916 | + | let em = if ((size(ej) > bw)) | |
917 | + | then ej[bw] | |
685 | 918 | else "0" | |
686 | - | let | |
687 | - | let | |
688 | - | let | |
689 | - | then toString(( | |
690 | - | else | |
691 | - | $Tuple2(( | |
919 | + | let en = parseIntValue(em) | |
920 | + | let cu = (eg * parseIntValue(ca[T])) | |
921 | + | let eo = if ((bw == ef)) | |
922 | + | then toString((en + cu)) | |
923 | + | else em | |
924 | + | $Tuple2((bI._1 :+ eo), (bw + 1)) | |
692 | 925 | } | |
693 | 926 | ||
694 | - | let | |
695 | - | let | |
696 | - | let | |
697 | - | func | |
698 | - | then | |
699 | - | else | |
927 | + | let ep = ( let bL = G | |
928 | + | let bM = size(bL) | |
929 | + | let bN = $Tuple2(nil, 0) | |
930 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
931 | + | then bP | |
932 | + | else ek(bP, bL[bQ]) | |
700 | 933 | ||
701 | - | func | |
702 | - | then | |
934 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
935 | + | then bP | |
703 | 936 | else throw("List size exceeds 50") | |
704 | 937 | ||
705 | - | | |
706 | - | func | |
707 | - | let | |
708 | - | let | |
709 | - | if (( | |
710 | - | then throw(((((((("You have " + | |
711 | - | else if (( | |
712 | - | then ( | |
713 | - | else ( | |
938 | + | bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._1 | |
939 | + | func eq (bI,cd) = { | |
940 | + | let er = ((parseIntValue(ca[cd]) * h) * eg) | |
941 | + | let es = parseIntValue(ea[cd]) | |
942 | + | if ((er > es)) | |
943 | + | then throw(((((((("You have " + ea[cd]) + " of ") + D[cd]) + ", but recipe requires ") + toString(er)) + " for quantity ") + toString(eg))) | |
944 | + | else if ((er > 0)) | |
945 | + | then (bI :+ toString((es - er))) | |
946 | + | else (bI :+ ea[cd]) | |
714 | 947 | } | |
715 | 948 | ||
716 | - | let | |
717 | - | let | |
718 | - | let | |
719 | - | let | |
720 | - | func | |
721 | - | then | |
722 | - | else | |
949 | + | let dT = { | |
950 | + | let bL = [0, 1, 2, 3, 4, 5] | |
951 | + | let bM = size(bL) | |
952 | + | let bN = nil | |
953 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
954 | + | then bP | |
955 | + | else eq(bP, bL[bQ]) | |
723 | 956 | ||
724 | - | func | |
725 | - | then | |
957 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
958 | + | then bP | |
726 | 959 | else throw("List size exceeds 6") | |
727 | 960 | ||
728 | - | | |
961 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
729 | 962 | } | |
730 | - | let | |
731 | - | let | |
732 | - | $Tuple2(nil, | |
963 | + | let dU = makeString([dQ[ai], dQ[aj], makeString(dT, "_"), makeString(ep, "_")], ":") | |
964 | + | let dV = bs(invoke(aF, "updateBackpack", [bg, dU], nil)) | |
965 | + | $Tuple2(nil, dV) | |
733 | 966 | } | |
734 | 967 | } | |
735 | 968 | } | |
736 | 969 | } | |
737 | 970 | } | |
738 | 971 | } | |
739 | 972 | else throw("Strict value is not equal to itself.") | |
740 | 973 | } | |
741 | 974 | ||
742 | 975 | ||
743 | 976 | ||
744 | - | @Callable( | |
745 | - | func setWarehouseOrder ( | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | then | |
977 | + | @Callable(dI) | |
978 | + | func setWarehouseOrder (et,aW) = { | |
979 | + | let eu = dI.originCaller | |
980 | + | let aK = toString(eu) | |
981 | + | let dV = if ((eu != aE)) | |
982 | + | then cQ() | |
750 | 983 | else false | |
751 | - | let | |
752 | - | if (!(isDefined(getInteger( | |
753 | - | then throw((("NFT " + | |
984 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
985 | + | if (!(isDefined(getInteger(aF, aO(aW))))) | |
986 | + | then throw((("NFT " + bW.name) + " is not staked")) | |
754 | 987 | else { | |
755 | - | let | |
756 | - | if (if (( | |
757 | - | then ( | |
988 | + | let ev = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + bW.name) + " is orphaned")) | |
989 | + | if (if ((eu != aE)) | |
990 | + | then (ev != aK) | |
758 | 991 | else false) | |
759 | - | then throw(( | |
992 | + | then throw((k + " is not yours")) | |
760 | 993 | else { | |
761 | - | let | |
762 | - | let | |
763 | - | let | |
764 | - | let | |
765 | - | let | |
766 | - | let | |
767 | - | let | |
768 | - | let | |
769 | - | let | |
770 | - | let | |
771 | - | let | |
772 | - | let | |
773 | - | let | |
774 | - | if ((0 > | |
775 | - | then throw((((("Attempt to reserve " + toString( | |
994 | + | let ew = split_4C(et, ":") | |
995 | + | let dJ = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil)) | |
996 | + | let dg = split_4C(dJ, ":") | |
997 | + | let ex = split(dg[ad], "_") | |
998 | + | let ey = parseIntValue(ex[af]) | |
999 | + | let ez = parseIntValue(ex[ah]) | |
1000 | + | let cr = bn(aW) | |
1001 | + | let dh = cq(cr) | |
1002 | + | let dK = df(dg, dh, ew) | |
1003 | + | let eA = dK._4 | |
1004 | + | let eB = dK._5 | |
1005 | + | let eC = (eA + eB) | |
1006 | + | let eD = ((ez - ey) - eC) | |
1007 | + | if ((0 > eD)) | |
1008 | + | then throw((((((("Attempt to reserve " + toString(eA)) + " space for buy orders, and ") + toString(eB)) + " space for sell orders (and occupied=") + toString(ey)) + "), leads to negative free space")) | |
776 | 1009 | else { | |
777 | - | let | |
778 | - | let | |
779 | - | let | |
780 | - | let | |
781 | - | then if ((size( | |
1010 | + | let eE = makeString_2C([dg[Z], makeString(dK._1, "_"), makeString(dK._2, "_"), makeString(dK._3, "_"), toString(eC)], ":") | |
1011 | + | let eF = bs(invoke(aF, "saveWarehouse", [eE, aW], nil)) | |
1012 | + | let eG = dK._6 | |
1013 | + | let eH = if ((eG > 0)) | |
1014 | + | then if ((size(dI.payments) != 1)) | |
782 | 1015 | then throw("exactly 1 payment must be attached") | |
783 | 1016 | else { | |
784 | - | let | |
785 | - | let | |
786 | - | let | |
787 | - | if (( | |
1017 | + | let dX = dI.payments[0] | |
1018 | + | let dY = dX.amount | |
1019 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
1020 | + | if ((dZ != b)) | |
788 | 1021 | then throw("USDT payments only!") | |
789 | - | else if (( | |
790 | - | then throw(("Payment needed is " + toString( | |
791 | - | else [StringEntry( | |
1022 | + | else if ((dY != eG)) | |
1023 | + | then throw(("Payment needed is " + toString(eG))) | |
1024 | + | else [StringEntry(cr, et)] | |
792 | 1025 | } | |
793 | - | else if (( | |
794 | - | then if ((size( | |
1026 | + | else if ((eG == 0)) | |
1027 | + | then if ((size(dI.payments) != 0)) | |
795 | 1028 | then throw("No payments needed") | |
796 | - | else [StringEntry( | |
797 | - | else if ((size( | |
1029 | + | else [StringEntry(cr, et)] | |
1030 | + | else if ((size(dI.payments) != 0)) | |
798 | 1031 | then throw("No payments needed") | |
799 | - | else [ScriptTransfer(addressFromStringValue( | |
800 | - | $Tuple2( | |
1032 | + | else [ScriptTransfer(addressFromStringValue(ev), -(eG), b), StringEntry(cr, et)] | |
1033 | + | $Tuple2(eH, $Tuple2(dV, eF)) | |
801 | 1034 | } | |
802 | 1035 | } | |
803 | 1036 | } | |
804 | 1037 | } | |
805 | 1038 | ||
806 | 1039 | ||
807 | 1040 | ||
808 | - | @Callable( | |
809 | - | func acceptWarehouseOrder ( | |
810 | - | let | |
811 | - | let | |
812 | - | let | |
813 | - | let | |
814 | - | let | |
815 | - | let | |
816 | - | if (( | |
817 | - | then throw((("Duck location type is " + | |
818 | - | else if (( | |
819 | - | then throw(((("Your staked duck is " + | |
1041 | + | @Callable(dI) | |
1042 | + | func acceptWarehouseOrder (eI,aW,bg) = { | |
1043 | + | let dO = cQ() | |
1044 | + | let eJ = dI.originCaller | |
1045 | + | let eK = toString(eJ) | |
1046 | + | let eL = valueOrErrorMessage(getString(aF, be(eK)), "You don't have a duck staked") | |
1047 | + | let dP = valueOrElse(getString(aF, bh(eL)), w) | |
1048 | + | let eM = split(value(dP), "_") | |
1049 | + | if ((eM[bq] != "L")) | |
1050 | + | then throw((("Duck location type is " + eM[bq]) + ", but should be L")) | |
1051 | + | else if ((eL != bg)) | |
1052 | + | then throw(((("Your staked duck is " + eL) + ", but passed ") + bg)) | |
820 | 1053 | else { | |
821 | - | let | |
822 | - | if (!(isDefined(getInteger( | |
823 | - | then throw((("NFT " + | |
1054 | + | let eN = value(assetInfo(fromBase58String(aW))) | |
1055 | + | if (!(isDefined(getInteger(aF, aO(aW))))) | |
1056 | + | then throw((("NFT " + eN.name) + " is not staked")) | |
824 | 1057 | else { | |
825 | - | let | |
826 | - | if (( | |
1058 | + | let eO = valueOrErrorMessage(getString(aF, aL(aW)), (("NFT " + eN.name) + " is orphaned")) | |
1059 | + | if ((eO == eK)) | |
827 | 1060 | then throw("You cannot trade with yourself") | |
828 | 1061 | else { | |
829 | - | let | |
830 | - | if ((size( | |
1062 | + | let eP = split_4C(eI, ":") | |
1063 | + | if ((size(eP) != 3)) | |
831 | 1064 | then throw("bpOrderStr should contain exactly 2 ':' separators") | |
832 | 1065 | else { | |
833 | - | let | |
834 | - | let | |
835 | - | let | |
1066 | + | let eQ = split(eP[0], "_") | |
1067 | + | let eR = split(eP[1], "_") | |
1068 | + | let eS = if ((eP[2] == "")) | |
836 | 1069 | then nil | |
837 | - | else split( | |
838 | - | if ((size( | |
1070 | + | else split(eP[2], "_") | |
1071 | + | if ((size(eQ) != n)) | |
839 | 1072 | then throw("All 6 resources should be passed") | |
840 | - | else if ((size( | |
1073 | + | else if ((size(eR) != n)) | |
841 | 1074 | then throw("All 6 materials should be passed") | |
842 | 1075 | else { | |
843 | - | let | |
844 | - | let | |
845 | - | let | |
846 | - | let | |
847 | - | let | |
1076 | + | let dJ = bs(invoke(aF, "getWarehouseREADONLY", [aW], nil)) | |
1077 | + | let dg = split_4C(dJ, ":") | |
1078 | + | let dj = split(dg[aa], "_") | |
1079 | + | let dk = split(dg[ab], "_") | |
1080 | + | let dl = if ((dg[ac] == "")) | |
848 | 1081 | then nil | |
849 | - | else split( | |
850 | - | let | |
851 | - | let | |
852 | - | let | |
853 | - | let | |
854 | - | let | |
855 | - | let | |
1082 | + | else split(dg[ac], "_") | |
1083 | + | let eT = parseIntValue(split(dg[ad], "_")[ae]) | |
1084 | + | let cP = bf(bg) | |
1085 | + | let dQ = cO(cP) | |
1086 | + | let eU = split(dQ[aj], "_") | |
1087 | + | let eV = split(dQ[ak], "_") | |
1088 | + | let eW = if ((dQ[al] == "")) | |
856 | 1089 | then nil | |
857 | - | else split( | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | let | |
862 | - | let | |
1090 | + | else split(dQ[al], "_") | |
1091 | + | let cr = bn(aW) | |
1092 | + | let eX = cq(cr) | |
1093 | + | let eY = split(eX[cn], "_") | |
1094 | + | let eZ = split(eX[co], "_") | |
1095 | + | let fa = if ((eX[cp] == "")) | |
863 | 1096 | then nil | |
864 | - | else split( | |
865 | - | let | |
866 | - | let | |
867 | - | let | |
868 | - | let | |
869 | - | func | |
870 | - | then | |
871 | - | else | |
1097 | + | else split(eX[cp], "_") | |
1098 | + | let ds = { | |
1099 | + | let bL = eQ | |
1100 | + | let bM = size(bL) | |
1101 | + | let bN = $Tuple12(nil, nil, nil, 0, 0, 0, 0, eU, dj, eY, C, false) | |
1102 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
1103 | + | then bP | |
1104 | + | else dv(bP, bL[bQ]) | |
872 | 1105 | ||
873 | - | func | |
874 | - | then | |
1106 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
1107 | + | then bP | |
875 | 1108 | else throw("List size exceeds 6") | |
876 | 1109 | ||
877 | - | | |
1110 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
878 | 1111 | } | |
879 | - | let | |
880 | - | let | |
881 | - | let | |
882 | - | let | |
883 | - | func | |
884 | - | then | |
885 | - | else | |
1112 | + | let cL = { | |
1113 | + | let bL = eR | |
1114 | + | let bM = size(bL) | |
1115 | + | let bN = $Tuple12(nil, nil, nil, ds._4, ds._5, ds._6, 0, eV, dk, eZ, D, false) | |
1116 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
1117 | + | then bP | |
1118 | + | else dv(bP, bL[bQ]) | |
886 | 1119 | ||
887 | - | func | |
888 | - | then | |
1120 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
1121 | + | then bP | |
889 | 1122 | else throw("List size exceeds 6") | |
890 | 1123 | ||
891 | - | | |
1124 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
892 | 1125 | } | |
893 | - | let | |
1126 | + | let cs = if ((size(eS) != 0)) | |
894 | 1127 | then { | |
895 | - | let | |
896 | - | let | |
897 | - | let | |
898 | - | func | |
899 | - | then | |
900 | - | else | |
1128 | + | let bL = eS | |
1129 | + | let bM = size(bL) | |
1130 | + | let bN = $Tuple12(nil, nil, nil, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true) | |
1131 | + | func dt (bP,bQ) = if ((bQ >= bM)) | |
1132 | + | then bP | |
1133 | + | else dv(bP, bL[bQ]) | |
901 | 1134 | ||
902 | - | func | |
903 | - | then | |
1135 | + | func du (bP,bQ) = if ((bQ >= bM)) | |
1136 | + | then bP | |
904 | 1137 | else throw("List size exceeds 50") | |
905 | 1138 | ||
906 | - | | |
1139 | + | du(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(dt(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
907 | 1140 | } | |
908 | - | else $Tuple12( | |
909 | - | let | |
910 | - | let | |
1141 | + | else $Tuple12(dl, fa, eW, cL._4, cL._5, cL._6, 0, eW, dl, fa, E, true) | |
1142 | + | let fb = cs._4 | |
1143 | + | let fc = if ((0 > (eT - fb))) | |
911 | 1144 | then 0 | |
912 | - | else ( | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | let | |
917 | - | let | |
918 | - | let | |
919 | - | let | |
920 | - | let | |
1145 | + | else (eT - fb) | |
1146 | + | let eE = makeString_2C([dg[Z], makeString(ds._1, "_"), makeString(cL._1, "_"), makeString(cs._1, "_"), toString(fc)], ":") | |
1147 | + | let fd = makeString_2C([makeString(ds._2, "_"), makeString(cL._2, "_"), makeString(cs._2, "_")], ":") | |
1148 | + | let fe = makeString_2C([dQ[ai], makeString(ds._3, "_"), makeString(cL._3, "_"), makeString(cs._3, "_")], ":") | |
1149 | + | let eF = bs(invoke(aF, "saveWarehouse", [eE, aW], nil)) | |
1150 | + | let ff = bs(invoke(aF, "updateBackpack", [bg, fe], nil)) | |
1151 | + | let eH = [StringEntry(cr, fd)] | |
1152 | + | let fg = cs._5 | |
1153 | + | let fh = if ((fg > 0)) | |
921 | 1154 | then { | |
922 | - | let | |
923 | - | let | |
924 | - | let | |
925 | - | if (isDefined( | |
926 | - | then ((( | |
927 | - | else (( | |
1155 | + | let fi = fraction(cs._5, ci, g) | |
1156 | + | let fj = bb(eK) | |
1157 | + | let fk = getString(aF, fj) | |
1158 | + | if (isDefined(fk)) | |
1159 | + | then (((eH :+ ScriptTransfer(eJ, (cs._5 - (3 * fi)), b)) :+ ScriptTransfer(aE, fi, b)) :+ ScriptTransfer(addressFromStringValue(value(fk)), fi, b)) | |
1160 | + | else ((eH :+ ScriptTransfer(eJ, (cs._5 - (3 * fi)), b)) :+ ScriptTransfer(aE, fi, b)) | |
928 | 1161 | } | |
929 | - | else | |
930 | - | let | |
931 | - | let | |
932 | - | then if ((size( | |
1162 | + | else eH | |
1163 | + | let fl = cs._6 | |
1164 | + | let fm = if ((fl > 0)) | |
1165 | + | then if ((size(dI.payments) != 1)) | |
933 | 1166 | then throw("exactly 1 payment must be attached") | |
934 | 1167 | else { | |
935 | - | let | |
936 | - | let | |
937 | - | let | |
938 | - | if (( | |
1168 | + | let dX = dI.payments[0] | |
1169 | + | let dY = dX.amount | |
1170 | + | let dZ = valueOrErrorMessage(dX.assetId, "WAVES can't be used as payment") | |
1171 | + | if ((dZ != b)) | |
939 | 1172 | then throw("USDT payments only!") | |
940 | - | else if (( | |
941 | - | then throw(("Payment needed is " + toString( | |
942 | - | else if (( | |
943 | - | then throw(("Payment should be at least " + toString( | |
1173 | + | else if ((dY != fl)) | |
1174 | + | then throw(("Payment needed is " + toString(fl))) | |
1175 | + | else if ((cj > dY)) | |
1176 | + | then throw(("Payment should be at least " + toString(cj))) | |
944 | 1177 | else { | |
945 | - | let | |
946 | - | let | |
947 | - | let | |
948 | - | if (isDefined( | |
949 | - | then ((( | |
950 | - | else (( | |
1178 | + | let fn = fraction(cs._6, ci, g) | |
1179 | + | let fj = bb(eO) | |
1180 | + | let fk = getString(aF, fj) | |
1181 | + | if (isDefined(fk)) | |
1182 | + | then (((fh :+ ScriptTransfer(addressFromStringValue(eO), (cs._6 - (3 * fn)), b)) :+ ScriptTransfer(aE, fn, b)) :+ ScriptTransfer(addressFromStringValue(value(fk)), fn, b)) | |
1183 | + | else ((fh :+ ScriptTransfer(addressFromStringValue(eO), (cs._6 - (3 * fn)), b)) :+ ScriptTransfer(aE, fn, b)) | |
951 | 1184 | } | |
952 | 1185 | } | |
953 | - | else if ((size( | |
1186 | + | else if ((size(dI.payments) != 0)) | |
954 | 1187 | then throw("No payments needed") | |
955 | - | else | |
956 | - | $Tuple2( | |
1188 | + | else fh | |
1189 | + | $Tuple2(fm, $Tuple3(dO, eF, ff)) | |
957 | 1190 | } | |
958 | 1191 | } | |
959 | 1192 | } | |
960 | 1193 | } | |
961 | 1194 | } | |
962 | 1195 | } | |
963 | 1196 | ||
964 | 1197 | ||
965 | 1198 | ||
966 | - | @Callable( | |
967 | - | func sellProductsToES ( | |
968 | - | let | |
969 | - | if (( | |
970 | - | then if ((size( | |
1199 | + | @Callable(dI) | |
1200 | + | func sellProductsToES (dM) = { | |
1201 | + | let dO = cQ() | |
1202 | + | if ((dO == dO)) | |
1203 | + | then if ((size(dI.payments) != 0)) | |
971 | 1204 | then throw("No payments needed") | |
972 | 1205 | else { | |
973 | - | let | |
974 | - | let | |
975 | - | if (( | |
976 | - | then throw(("Duck location type should be Airport, but is " + | |
1206 | + | let bg = valueOrErrorMessage(getString(aF, be(toString(dI.caller))), "You don't have a duck staked") | |
1207 | + | let dP = split(valueOrElse(getString(aF, bh(bg)), w), "_") | |
1208 | + | if ((dP[bq] != "A")) | |
1209 | + | then throw(("Duck location type should be Airport, but is " + dP[bq])) | |
977 | 1210 | else { | |
978 | - | let | |
979 | - | let | |
1211 | + | let dQ = cO(bf(bg)) | |
1212 | + | let ej = if ((dQ[al] == "")) | |
980 | 1213 | then nil | |
981 | - | else split( | |
982 | - | let | |
983 | - | let | |
984 | - | let | |
985 | - | then split(value( | |
1214 | + | else split(dQ[al], "_") | |
1215 | + | let fo = bo() | |
1216 | + | let fp = getString(fo) | |
1217 | + | let fq = if (isDefined(fp)) | |
1218 | + | then split(value(fp), "_") | |
986 | 1219 | else nil | |
987 | - | func | |
988 | - | let | |
989 | - | let | |
990 | - | then | |
1220 | + | func fr (bI,fs) = { | |
1221 | + | let cd = bI._1 | |
1222 | + | let eg = if ((size(dM) > cd)) | |
1223 | + | then dM[cd] | |
991 | 1224 | else 0 | |
992 | - | if ((0 > | |
1225 | + | if ((0 > eg)) | |
993 | 1226 | then throw("Quantity cannot be negative") | |
994 | 1227 | else { | |
995 | - | let | |
996 | - | if ((size( | |
997 | - | then throw(("Fatal: unknown recipe: " + | |
1228 | + | let ca = split(fs, "_") | |
1229 | + | if ((size(ca) != (n + 3))) | |
1230 | + | then throw(("Fatal: unknown recipe: " + fs)) | |
998 | 1231 | else { | |
999 | - | let | |
1000 | - | let | |
1001 | - | let | |
1002 | - | then parseIntValue( | |
1232 | + | let ft = parseIntValue(ca[T]) | |
1233 | + | let fu = (y * ft) | |
1234 | + | let fv = if ((size(fq) > cd)) | |
1235 | + | then parseIntValue(fq[cd]) | |
1003 | 1236 | else 0 | |
1004 | - | let | |
1005 | - | if (( | |
1006 | - | then throw(((("Warehouse can buy only " + toString( | |
1237 | + | let fw = (fu - fv) | |
1238 | + | if ((eg > fw)) | |
1239 | + | then throw(((("Warehouse can buy only " + toString(fw)) + " of ") + E[cd])) | |
1007 | 1240 | else { | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | then parseIntValue( | |
1241 | + | let fx = bZ(ca) | |
1242 | + | let fy = fraction((fx * z), x, (10 * ft)) | |
1243 | + | let fz = if ((size(ej) > cd)) | |
1244 | + | then parseIntValue(ej[cd]) | |
1012 | 1245 | else 0 | |
1013 | - | if (( | |
1014 | - | then throw(((("You have only " + toString( | |
1015 | - | else $Tuple4(( | |
1246 | + | if ((eg > fz)) | |
1247 | + | then throw(((("You have only " + toString(fz)) + " of ") + E[cd])) | |
1248 | + | else $Tuple4((cd + 1), (bI._2 + (fy * eg)), (bI._3 :+ toString((fz - eg))), (bI._4 :+ toString((fv + eg)))) | |
1016 | 1249 | } | |
1017 | 1250 | } | |
1018 | 1251 | } | |
1019 | 1252 | } | |
1020 | 1253 | ||
1021 | - | let | |
1022 | - | let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | func | |
1026 | - | then | |
1027 | - | else | |
1254 | + | let dT = { | |
1255 | + | let bL = G | |
1256 | + | let bM = size(bL) | |
1257 | + | let bN = $Tuple4(0, 0, nil, nil) | |
1258 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
1259 | + | then bP | |
1260 | + | else fr(bP, bL[bQ]) | |
1028 | 1261 | ||
1029 | - | func | |
1030 | - | then | |
1262 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
1263 | + | then bP | |
1031 | 1264 | else throw("List size exceeds 50") | |
1032 | 1265 | ||
1033 | - | | |
1266 | + | bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
1034 | 1267 | } | |
1035 | - | let | |
1036 | - | let | |
1037 | - | $Tuple2([StringEntry( | |
1268 | + | let fe = makeString_2C([dQ[ai], dQ[aj], dQ[ak], makeString(dT._3, "_")], ":") | |
1269 | + | let ff = bs(invoke(aF, "updateBackpack", [bg, fe], nil)) | |
1270 | + | $Tuple2([StringEntry(fo, makeString(dT._4, "_")), ScriptTransfer(dI.caller, dT._2, b)], ff) | |
1038 | 1271 | } | |
1039 | 1272 | } | |
1040 | 1273 | else throw("Strict value is not equal to itself.") | |
1041 | 1274 | } | |
1042 | 1275 | ||
1043 | 1276 | ||
1044 | 1277 | ||
1045 | - | @Callable( | |
1046 | - | func updateEsStorage ( | |
1278 | + | @Callable(dI) | |
1279 | + | func updateEsStorage (fA) = if ((dI.caller != aF)) | |
1047 | 1280 | then throw("Permission denied") | |
1048 | - | else $Tuple2([StringEntry( | |
1281 | + | else $Tuple2([StringEntry(bo(), fA)], fA) | |
1049 | 1282 | ||
1050 | 1283 |
github/deemru/w8io/169f3d6 827.54 ms ◑