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