tx · EjTC4xZvKeHSdear9vRg8JywCrFK8Eb6tZJVzgvJD3Ph

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.05700000 Waves

2023.09.22 21:27 [2766948] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "EjTC4xZvKeHSdear9vRg8JywCrFK8Eb6tZJVzgvJD3Ph", "fee": 5700000, "feeAssetId": null, "timestamp": 1695407268746, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "UnSGjWqZF9b78Ws1TdGdQ9JipRk4TbJq6sAp8km77Etg8pmye5FMsoycPDvqT7AxxjsECw24RyZHECiqS7kqUsq" ], "script": "base64:BgKBAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESBQoDEREIEgYKBBERCAgSBAoCERESBQoDEREIEgYKBBERCAgSAwoBERIDCgEREgQKAhEIEgQKAgEBEgQKAggIEgUKAwgICBIECgIICBIFCgMICAgSAwoBERIDCgEIEgMKAQESAwoBCGUAB3hwVHJhZGUAkE4AB3hwQ3JhZnQAkE4ACnhwU2VsbFRvRXMAkE4ABnhwU2hvcACQTgAKTEFORFBSRUZJWAIETEFORAAGTlVNUkVTAAYAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhABBSRVNPVVJDRVBSSUNFTUlOANW1AgANRVNNQVhQQUNLQUdFUwAKAAlFU0JVWUNPRUYABAAVTUlOX1VTRFRfRkVFX0RFTElWRVJZANCGAwAXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUA+MkEAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYADXJJZHhDb250aW5lbnQABwAKUkVDSVBFU0laRQALAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDmtleU9yZGVyQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgpsYW5kT3JkZXJfBQtsYW5kQXNzZXRJZAEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAARS1NfQUxMT1dfREVMSVZFUlkGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ1AKCNBgAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAZNVUxUMTAAgMivoCUADk1JTlNIT1BQQVlNRU5UAKCNBgAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAFElkeENmZ0ludmVzdEZ1bmREYXBwAAYAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAATRkFDVE9SWU1BWFdBUkVIT1VTRQCAyK+gJQAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkFVQ1RJT05GRUUAkE4ADERFTElWRVJZX0ZFRQCQTgAOREVMSVZFUllfRkVFMTUAmHUBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIJZmFjdG9yeUlkB3Jlc1R5cGUJAKwCAgkArAICCQCsAgICG2ZhY3RvcnlXaEJ5Q29udGluZW50QW5kUmVzXwUJZmFjdG9yeUlkAgFfCQCkAwEFB3Jlc1R5cGUACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2R0UmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkdFJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZHRSZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZHRSZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEECXVzZHRTcGVudAkAZAIJAGsDBQJtMAkAZQIJAGgCBQ1CVVlNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZQIJAGgCAGQFAncwCQBoAgAyBQJtMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwUCbTEJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAZtYXgxMDEJAGQCBQhtYXhQcmljZQkAaQIFCG1heFByaWNlAGQDCQBmAgkAaAIFCXVzZHRTcGVudAUFTVVMVDgJAGgCBQZtYXgxMDEFAW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQl1c2R0U3BlbnQCAyAvIAkApAMBBQFtAg4gPiBtYXhQcmljZSA9IAkApAMBBQhtYXhQcmljZQIDLCAoBQVsb2NJZAICLCAJAJEDAgUIbWF0VHlwZXMFB21hdFR5cGUCASkJAJUKAwkBDEludGVnZXJFbnRyeQIFBXdoS2V5CQBlAgUCdzAFAW0FCXVzZHRTcGVudAUBbQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC8CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsAQxjaGVja0Jsb2NrZWQAAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ9zdGFraW5nQ29udHJhY3QJAQprZXlCbG9ja2VkAAcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBQR1bml0AQZwcm9sb2cACQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIKc2F2ZUxhc3RUeAUDbmlsBQNuaWwBCXNldENvbW1vbgIDYWNjD2lnbm9yZWRJdGVyYXRvcgQBaggFA2FjYwJfMQQEaXRlbQMJAGYCCQCQAwEIBQNhY2MDXzEwBQFqCQCRAwIIBQNhY2MDXzEwBQFqAgMwQDAEBmlzUHJvZAgFA2FjYwJfOAQJaXRlbVBhcnRzCQC1CQIFBGl0ZW0CAUADCQECIT0CCQCQAwEFCWl0ZW1QYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQIbmV3T3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlpdGVtUGFydHMAAAQIbmV3T3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlpdGVtUGFydHMAAQQJbmV3T3JkVXNkAwUGaXNQcm9kCQBoAgUIbmV3T3JkQW0FCG5ld09yZFByCQBrAwUIbmV3T3JkQW0FCG5ld09yZFByBQVNVUxUOAQJbmV3T3JkVm9sCQEIdG9Wb2x1bWUDBQhuZXdPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfNgUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzYFAWoAAAQLY3VyT3JkUGFydHMJALUJAgMJAGYCCQCQAwEIBQNhY2MCXzcFAWoJAJEDAggFA2FjYwJfNwUBagIDMEAwAgFABAhjdXJPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAAECGN1ck9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAQMDCQBmAgAABQhjdXJPcmRQcgYJAGYCAAAFCG5ld09yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECWN1ck9yZFVzZAMFBmlzUHJvZAkAaAIFCGN1ck9yZEFtBQhjdXJPcmRQcgkAawMFCGN1ck9yZEFtBQhjdXJPcmRQcgUFTVVMVDgDCQAAAgUIbmV3T3JkQW0AAAMJAGYCBQhjdXJPcmRBbQAACQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQIBQNhY2MCXzMIBQNhY2MCXzQJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkAZAIIBQNhY2MCXzkJAQh0b1ZvbHVtZQMFBndoSW5pdAUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTAJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFCGN1ck9yZEFtCAUDYWNjAl8zCAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAGQCCAUDYWNjAl85CQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQhjdXJPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTADCQBmAgUIbmV3T3JkQW0AAAMJAGYCAAAFCGN1ck9yZEFtCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAgFA2FjYwJfNAkAZAIIBQNhY2MCXzUFCW5ld09yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQhjdXJPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTAJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAgFA2FjYwJfNAkAZQIJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDBQZ3aEluaXQFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIAAAUIY3VyT3JkQW0EBmFtRGlmZgkAZQIFCGN1ck9yZEFtBQhuZXdPcmRBbQMJAGYCAAAJAGUCBQZ3aEluaXQFBmFtRGlmZgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBBQZhbURpZmYCGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUGYW1EaWZmCAUDYWNjAl8zCQBlAggFA2FjYwJfNAUJbmV3T3JkVm9sCAUDYWNjAl81CAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMJAGUCBQZ3aEluaXQFBmFtRGlmZgUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTADCQBmAgAACQBkAgUGd2hJbml0BQhuZXdPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFCG5ld09yZEFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQZ3aEluaXQFCG5ld09yZEFtCAUDYWNjAl8zCQBlAggFA2FjYwJfNAUJbmV3T3JkVm9sCQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMJAGQCBQZ3aEluaXQFCG5ld09yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAELc2V0SW50ZXJuYWwDCWN1cnJlbnRXaApjdXJyZW50T3JkBm5ld09yZAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA1jdXJyZW50T3JkUmVzCQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4UmVzAgFfBA1jdXJyZW50T3JkTWF0CQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4TWF0AgFfBA5jdXJyZW50T3JkUHJvZAMJAAACCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIBXwMJAQIhPQIJAJADAQUGbmV3T3JkAAMJAAIBAjNuZXdPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUGbmV3T3JkAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUGbmV3T3JkAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFBm5ld09yZAACAgAFA25pbAkAvAkCCQCRAwIFBm5ld09yZAACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQBcgoAAiRsBQhyZXNUeXBlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgAABQNuaWwAAAAAAAAFCWN1cnJXaFJlcwUNY3VycmVudE9yZFJlcwcAAAUIcmVzUGFydHMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXNldENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQBbQoAAiRsBQhtYXRUeXBlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgAABQNuaWwIBQFyAl8zCAUBcgJfNAgFAXICXzUFCWN1cnJXaE1hdAUNY3VycmVudE9yZE1hdAcIBQFyAl85BQhtYXRQYXJ0cwoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc2V0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAFwCgACJGwFCXByb2RUeXBlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgAABQNuaWwIBQFtAl8zCAUBbQJfNAgFAW0CXzUFCmN1cnJXaFByb2QFDmN1cnJlbnRPcmRQcm9kBggFAW0CXzkFCXByb2RQYXJ0cwoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc2V0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJkKBwgFAXICXzIIBQFtAl8yCAUBcAJfMggFAXACXzMIBQFwAl80CAUBcAJfNQgFAXACXzkBDGFjY2VwdENvbW1vbgIDYWNjCWJwT3JkSXRlbQQBaggFA2FjYwJfNwQGaXNQcm9kCAUDYWNjA18xMgQKYnBPcmRQYXJ0cwkAtQkCBQlicE9yZEl0ZW0CAUADCQECIT0CCQCQAwEFCmJwT3JkUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UEB2JwT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicE9yZFBhcnRzAAAEB2JwT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicE9yZFBhcnRzAAEDCQBmAgAABQdicE9yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECGJwT3JkVXNkAwUGaXNQcm9kCQBoAgUHYnBPcmRBbQUHYnBPcmRQcgkAawMFB2JwT3JkQW0FB2JwT3JkUHIFBU1VTFQ4BAZicEluaXQDCQBmAgkAkAMBCAUDYWNjAl84BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfOAUBagAABAZ3aEluaXQDCQBmAgkAkAMBCAUDYWNjAl85BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfOQUBagAABAl3aE9yZEluaXQDCQBmAgkAkAMBCAUDYWNjA18xMAUBagkAkQMCCAUDYWNjA18xMAUBagIDMEAwBAp3aE9yZFBhcnRzCQC1CQIFCXdoT3JkSW5pdAIBQAQHd2hPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCndoT3JkUGFydHMAAAQHd2hPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCndoT3JkUGFydHMAAQMDCQECIT0CBQdicE9yZEFtAAAJAQIhPQIFB2JwT3JkUHIFB3doT3JkUHIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICClByaWNlcyBvZiAJAJEDAggFA2FjYwNfMTEFAWoCFyBkb24ndCBtYXRjaCEgV0ggcHJpY2U9CQCkAwEFB3doT3JkUHICDSwgeW91ciBwcmljZT0JAKQDAQUHYnBPcmRQcgQId2hPcmRVc2QDBQZpc1Byb2QJAGgCBQd3aE9yZEFtBQd3aE9yZFByCQBrAwUHd2hPcmRBbQUHd2hPcmRQcgUFTVVMVDgECGRlbHRhVm9sCQEIdG9Wb2x1bWUDBQdicE9yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kAwkAAAIFB2JwT3JkQW0AAAkAnwoNCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIFCXdoT3JkSW5pdAkAzQgCCAUDYWNjAl8zCQCkAwEFBmJwSW5pdAgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QIBQNhY2MDXzEzAwkAZgIFB2JwT3JkQW0AAAMJAGYCAAAFB3doT3JkQW0DCQBmAgUHYnBPcmRBbQkBAS0BBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkApAMBBQdicE9yZEFtAgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhssIGJ1dCB3YXJlaG91c2Ugb25seSBzZWxscyAJAKQDAQkBAS0BBQd3aE9yZEFtCQCfCg0JAM0IAggFA2FjYwJfMQkApAMBBQZ3aEluaXQJAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zCQCkAwEJAGQCBQZicEluaXQFB2JwT3JkQW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAgFA2FjYwJfNQkAZAIIBQNhY2MCXzYFCGJwT3JkVXNkCQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEFBmlzUHJvZAkAZAIIBQNhY2MDXzEzAwUGaXNQcm9kCQBoAgUHYnBPcmRBbQUFTVVMVDgFB2JwT3JkQW0JAAIBCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCRAwIIBQNhY2MDXzExBQFqAiAgd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3Qgc2VsbCBpdAMJAGYCBQd3aE9yZEFtAAADCQBmAgkBAS0BBQdicE9yZEFtBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhosIGJ1dCB3YXJlaG91c2Ugb25seSBidXlzIAkApAMBBQd3aE9yZEFtAwkAZgIJAQEtAQUHYnBPcmRBbQUGYnBJbml0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAhQsIGJ1dCB5b3Ugb25seSBoYXZlIAkApAMBBQZicEluaXQCBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoJAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQZ3aEluaXQFB2JwT3JkQW0JAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zCQCkAwEJAGQCBQZicEluaXQFB2JwT3JkQW0JAGUCCAUDYWNjAl80BQhkZWx0YVZvbAkAZQIIBQNhY2MCXzUFCGJwT3JkVXNkCAUDYWNjAl82CQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEFBmlzUHJvZAkAZQIIBQNhY2MDXzEzAwUGaXNQcm9kCQBoAgUHYnBPcmRBbQUFTVVMVDgFB2JwT3JkQW0JAAIBCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkAkQMCCAUDYWNjA18xMQUBagIfIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IGJ1eSBpdAETc2VsbFJlc291cmNlc0NvbW1vbgQHcmVzTGlzdAxmYWN0b3J5TG9jSWQHYW1vdW50cwltaW5QcmljZXMKAQVhZGRlcgIDYWNjAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAJEDAgUHcmVzTGlzdAUBagIEIG9mIAkAkQMCBQhyZXNUeXBlcwUBagIULCBidXQgdHJpZWQgdG8gc2VsbCAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIAAAkAkQMCBQdhbW91bnRzBQFqCQACAQkArAICCQCsAgIJAKwCAgIlWW91IHRyaWVkIHRvIHNlbGwgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhyZXNUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQEMc2VsbEludGVybmFsBAUMZmFjdG9yeUxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWluUHJpY2VzBQFqCQCWCgQJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAJEDAgUHYW1vdW50cwUBagkAZAIIBQNhY2MCXzMIBQFiAl8yCQBkAggFA2FjYwJfNAkAkQMCBQdhbW91bnRzBQFqCQCWCgQIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdyZXNMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJidXlNYXRlcmlhbHNDb21tb24EB21hdExpc3QMZmFjdG9yeUxvY0lkB2Ftb3VudHMJbWF4UHJpY2VzCgEIbVVwZGF0ZXICA2FjYwFqAwkAZgIAAAkAkQMCBQdhbW91bnRzBQFqCQACAQkArAICCQCsAgIJAKwCAgIkWW91IHRyaWVkIHRvIGJ1eSBuZWdhdGl2ZSBhbW91bnQgb2YgCQCRAwIFCG1hdFR5cGVzBQFqAgI6IAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqAAAEAWIJAQtidXlJbnRlcm5hbAQFDGZhY3RvcnlMb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1heFByaWNlcwUBagkAlgoECQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqCAUBYgJfMwkAZAIIBQNhY2MCXzMIBQFiAl8yCQBkAggFA2FjYwJfNAkAkQMCBQdhbW91bnRzBQFqCQCWCgQIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCG1VcGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARdleGNoYW5nZVJlc291cmNlc0NvbW1vbgMHcmVzTGlzdAdtYXRMaXN0B2Ftb3VudHMKAQlleGNoYW5nZXICA2FjYwFqBANhbWoJAJEDAgUHYW1vdW50cwUBagMJAGYCBQNhbWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhgsIGJ1dCB0cmllZCB0byBleGNoYW5nZSAJAKQDAQUDYW1qAwkAZgIAAAUDYW1qCQACAQkArAICCQCsAgIJAKwCAgIpWW91IHRyaWVkIHRvIGV4Y2hhbmdlIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEFA2FtagMJAGYCBQNhbWoAAAkAlgoECQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqBQNhbWoJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoFA2FtagkAZAIIBQNhY2MCXzMJAGsDBQNhbWoFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4CQBkAggFA2FjYwJfNAUDYW1qCQCWCgQJAM0IAggFA2FjYwJfMQkAkQMCBQdyZXNMaXN0BQFqCQDNCAIIBQNhY2MCXzIJAJEDAgUHbWF0TGlzdAUBaggFA2FjYwJfMwgFA2FjYwJfNAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUDbmlsBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlleGNoYW5nZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEHNob3AydXNlckFjdGlvbnMDDXVzZFdoMkJwU2FsZG8KY2FsbGVyQWRkcgtyZWNlaXZlZEZlZQMJAGYCBQ11c2RXaDJCcFNhbGRvAAAEC3VzZFdoMkJwRmVlCQBrAwUNdXNkV2gyQnBTYWxkbwUKQVVDVElPTkZFRQUFTVVMVDYDCQBnAgULcmVjZWl2ZWRGZWUJAGUCBQ11c2RXaDJCcFNhbGRvCQBoAgADBQt1c2RXaDJCcEZlZQkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQtyZWNlaXZlZEZlZQAGBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCmNhbGxlckFkZHIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkEBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUKY2FsbGVyQWRkcgkAzQgCCQDNCAIDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZQIJAGUCBQ11c2RXaDJCcFNhbGRvCQBoAgADBQt1c2RXaDJCcEZlZQULcmVjZWl2ZWRGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAUDbmlsARB1c2VyMnNob3BBY3Rpb25zBA11c2RCcDJXaFNhbGRvBHBtdHMNc2hvcExhbmRPd25lcghzcGVudEZlZQMJAGYCBQ11c2RCcDJXaFNhbGRvAAADCQECIT0CCQCQAwEFBHBtdHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCBQRwbXRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQ11c2RCcDJXaFNhbGRvBQhzcGVudEZlZQMJAQIhPQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFDXVzZEJwMldoU2FsZG8ABgIBKwkBCmZpeGVkUG9pbnQCBQhzcGVudEZlZQAGAg4oZGVsaXZlcnkgZmVlKQMJAGYCBQ5NSU5TSE9QUEFZTUVOVAUNdXNkQnAyV2hTYWxkbwkAAgEJAKwCAgISTWluIHNob3AgdHJhZGUgaXMgCQEKZml4ZWRQb2ludAIFDk1JTlNIT1BQQVlNRU5UAAYEC3VzZEJwMldoRmVlCQBrAwUNdXNkQnAyV2hTYWxkbwUKQVVDVElPTkZFRQUFTVVMVDYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUNc2hvcExhbmRPd25lcgQFcmVmQnkJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhyZWZCeUtleQkAzQgCCQDNCAIDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDXNob3BMYW5kT3duZXIJAGUCBQ11c2RCcDJXaFNhbGRvCQBoAgADBQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkAwkBAiE9AgkAkAMBBQRwbXRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQFA25pbAEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBg9zaG9wTGFuZEFzc2V0SWQKY2FsbGVyQWRkcgpicE9yZGVyU3RyCWJwUmVzTGlzdAlicE1hdExpc3QKYnBQcm9kTGlzdAQJbGFuZEFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUPc2hvcExhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUPc2hvcExhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEDXNob3BMYW5kT3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ9zaG9wTGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAAACBQ1zaG9wTGFuZE93bmVyBQpjYWxsZXJBZGRyCQACAQIeWW91IGNhbm5vdCB0cmFkZSB3aXRoIHlvdXJzZWxmBAxicE9yZGVyUGFydHMJALwJAgUKYnBPcmRlclN0cgIBOgMJAQIhPQIJAJADAQUMYnBPcmRlclBhcnRzAAMJAAIBAjJicE9yZGVyU3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIYnBPcmRSZXMJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAAIBXwQIYnBPcmRNYXQJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAQIBXwQJYnBPcmRQcm9kAwkAAAIJAJEDAgUMYnBPcmRlclBhcnRzAAICAAUDbmlsCQC8CQIJAJEDAgUMYnBPcmRlclBhcnRzAAICAV8DCQECIT0CCQCQAwEFCGJwT3JkUmVzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIYnBPcmRNYXQFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFD3Nob3BMYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQGb3JkS2V5CQEOa2V5T3JkZXJCeUxhbmQBBQ9zaG9wTGFuZEFzc2V0SWQEBXdoT3JkCQEIZ2V0T3JkZXIBBQZvcmRLZXkECHdoT3JkUmVzCQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeFJlcwIBXwQId2hPcmRNYXQJALUJAgkAkQMCBQV3aE9yZAUJb3JkSWR4TWF0AgFfBAl3aE9yZFByb2QDCQAAAgkAkQMCBQV3aE9yZAUKb3JkSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQV3aE9yZAUKb3JkSWR4UHJvZAIBXwQBcgoAAiRsBQhicE9yZFJlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ8KDQUDbmlsBQNuaWwFA25pbAAAAAAAAAAABQlicFJlc0xpc3QFCWN1cnJXaFJlcwUId2hPcmRSZXMFCHJlc1R5cGVzBwAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhY2NlcHRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEAW0KAAIkbAUIYnBPcmRNYXQKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCfCg0FA25pbAUDbmlsBQNuaWwIBQFyAl80CAUBcgJfNQgFAXICXzYAAAUJYnBNYXRMaXN0BQljdXJyV2hNYXQFCHdoT3JkTWF0BQhtYXRUeXBlcwcIBQFyA18xMwoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNjZXB0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAFwAwkBAiE9AgkAkAMBBQlicE9yZFByb2QAAAoAAiRsBQlicE9yZFByb2QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCfCg0FA25pbAUDbmlsBQNuaWwIBQFtAl80CAUBbQJfNQgFAW0CXzYAAAUKYnBQcm9kTGlzdAUKY3VycldoUHJvZAUJd2hPcmRQcm9kBQlwcm9kVHlwZXMGCAUBbQNfMTMKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFjY2VwdENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCfCg0FCmN1cnJXaFByb2QFCXdoT3JkUHJvZAUKYnBQcm9kTGlzdAgFAW0CXzQIBQFtAl81CAUBbQJfNgAABQpicFByb2RMaXN0BQpjdXJyV2hQcm9kBQl3aE9yZFByb2QFCXByb2RUeXBlcwYIBQFtA18xMwQIdm9sU2FsZG8IBQFwAl80BAxuZXdMb2NrZWRWb2wDCQBmAgAACQBlAgUPY3VycldoTG9ja2VkVm9sBQh2b2xTYWxkbwAACQBlAgUPY3VycldoTG9ja2VkVm9sBQh2b2xTYWxkbwQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCCAUBcgJfMQIBXwkAzAgCCQC5CQIIBQFtAl8xAgFfCQDMCAIJALoJAggFAXACXzECAV8JAMwIAgkApAMBBQxuZXdMb2NrZWRWb2wFA25pbAIBOgQLbmV3V2hPcmRTdHIJALoJAgkAzAgCCQC5CQIIBQFyAl8yAgFfCQDMCAIJALkJAggFAW0CXzICAV8JAMwIAgkAugkCCAUBcAJfMgIBXwUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFD3Nob3BMYW5kQXNzZXRJZAUDbmlsBQNuaWwEDmFjY1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUNc2hvcExhbmRPd25lcgkAzAgCCQBrAwUGeHBTaG9wCAUBcANfMTMFBU1VTFQ4BQNuaWwFA25pbAkAnAoKCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld1doT3JkU3RyCAUBcgJfMwgFAW0CXzMIBQFwAl8zCAUBcAJfNQgFAXACXzYIBQFwA18xMwUNc2hvcExhbmRPd25lcgUGd2hTYXZlBQ5hY2NTdGF0c1Jlc3VsdBUBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMjU4NzcyNjAwMwkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0CQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI1ODc3MjYwMDMCXzEEBm5ld1JlcwgFDSR0MDI1ODc3MjYwMDMCXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI1ODc3MjYwMDMCXzMECHRvdGFsUmVzCAUNJHQwMjU4NzcyNjAwMwJfNAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBEnNlbGxSZXNvdXJjZXNXb3JsZAIEYWRkcgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFDWFjcmVzQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQGb25lUmVzCQBpAgUGYW1vdW50AB4EEW9uZUZhY3RvcnlBbW91bnRzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzBQNuaWwEAXMJAKQDAQUGb25lUmVzBAdyZXNMaXN0CQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzBQNuaWwECW1pblByaWNlcwkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAUDbmlsCgEKb25lRmFjdG9yeQIDYWNjCWNvbnRpbmVudAQBeAkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0BQljb250aW5lbnQFEW9uZUZhY3RvcnlBbW91bnRzBQltaW5QcmljZXMJAJUKAwkAzQgCCAUDYWNjAl8xCAUBeAJfMQkAZAIIBQNhY2MCXzIIBQF4Al8zCQBkAggFA2FjYwJfMwgFAXgCXzQEDSR0MDI3Mjc1MjczNjUKAAIkbAUKY29udGluZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKb25lRmFjdG9yeQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMjcyNzUyNzM2NQJfMQQMdXNkdFJlY2VpdmVkCAUNJHQwMjcyNzUyNzM2NQJfMgQIdG90YWxSZXMIBQ0kdDAyNzI3NTI3MzY1Al8zBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQx1c2R0UmVjZWl2ZWQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkAwkAZwIFA2ZlZQkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQNmZWUABgQIdXNkdExlZnQJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFEmludmVzdEZ1bmRDb250cmFjdAUIdXNkdExlZnQFC3VzZHRBc3NldElkCQCUCgIFCHVzZHRMZWZ0BQtzdGF0c1Jlc3VsdAFpARlzZWxsUmVzb3VyY2VzRHVja0RlbGl2ZXJ5AwdhbW91bnRzCW1pblByaWNlcxBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA0kdDAyODc5MTI4OTEyCQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAyODc5MTI4OTEyAl8xBAZuZXdSZXMIBQ0kdDAyODc5MTI4OTEyAl8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAyODc5MTI4OTEyAl8zBAh0b3RhbFJlcwgFDSR0MDI4NzkxMjg5MTICXzQEB25ld1BhY2sJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQDCQBnAgUDZmVlCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFA2ZlZQULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpARlzZWxsUmVzb3VyY2VzTGFuZERlbGl2ZXJ5BAdhbW91bnRzCW1pblByaWNlcwtsYW5kQXNzZXRJZBBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAipzZWxsUmVzb3VyY2VzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEBHVzZXIIBQFpBmNhbGxlcgQEYWRkcgkApQgBBQR1c2VyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAdyZXNMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzA5MzkzMTA2MAkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltaW5QcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzA5MzkzMTA2MAJfMQQGbmV3UmVzCAUNJHQwMzA5MzkzMTA2MAJfMgQMdXNkdFJlY2VpdmVkCAUNJHQwMzA5MzkzMTA2MAJfMwQIdG90YWxSZXMIBQ0kdDAzMDkzOTMxMDYwAl80BAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQx1c2R0UmVjZWl2ZWQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkAwkAZwIFA2ZlZQkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQNmZWUABgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBDGJ1eU1hdGVyaWFscwIHYW1vdW50cwltYXhQcmljZXMEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwMzI5MjAzMzA0MgkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzI5MjAzMzA0MgJfMQQGbmV3TWF0CAUNJHQwMzI5MjAzMzA0MgJfMgQJdXNkdFNwZW50CAUNJHQwMzI5MjAzMzA0MgJfMwQIdG90YWxNYXQIBQ0kdDAzMjkyMDMzMDQyAl80AwkAZgIFCXVzZHRTcGVudAUDYW10CQACAQkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFCXVzZHRTcGVudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUJdXNkdFNwZW50BQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBGGJ1eU1hdGVyaWFsc0R1Y2tEZWxpdmVyeQMHYW1vdW50cwltYXhQcmljZXMQZmFjdG9yeUNvbnRpbmVudAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzNDU2MDM0Njc3CQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWF4UHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDM0NTYwMzQ2NzcCXzEEBm5ld01hdAgFDSR0MDM0NTYwMzQ2NzcCXzIECXVzZHRTcGVudAgFDSR0MDM0NTYwMzQ2NzcCXzMECHRvdGFsTWF0CAUNJHQwMzQ1NjAzNDY3NwJfNAQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbE1hdAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzggCBQ5mYWN0b3J5QWN0aW9ucwUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBGGJ1eU1hdGVyaWFsc0xhbmREZWxpdmVyeQQHYW1vdW50cwltYXhQcmljZXMLbGFuZEFzc2V0SWQQZmFjdG9yeUNvbnRpbmVudAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEBHVzZXIIBQFpBmNhbGxlcgQEYWRkcgkApQgBBQR1c2VyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAdtYXRMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQNJHQwMzY5NTUzNzA3MgkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzNjk1NTM3MDcyAl8xBAZuZXdNYXQIBQ0kdDAzNjk1NTM3MDcyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzNjk1NTM3MDcyAl8zBAh0b3RhbE1hdAgFDSR0MDM2OTU1MzcwNzICXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFCXVzZHRTcGVudAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUJdXNkdFNwZW50BQNmZWUDCQBmAgUQdXNkdFNwZW50V2l0aEZlZQUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYCASsJAQpmaXhlZFBvaW50AgUDZmVlAAYCDihkZWxpdmVyeSBmZWUpBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM4IAgUOZmFjdG9yeUFjdGlvbnMFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQERZXhjaGFuZ2VSZXNvdXJjZXMBB2Ftb3VudHMEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwMzkxODYzOTI5MgkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwMzkxODYzOTI5MgJfMQQGbmV3TWF0CAUNJHQwMzkxODYzOTI5MgJfMgQJdXNkdFNwZW50CAUNJHQwMzkxODYzOTI5MgJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDAzOTE4NjM5MjkyAl80AwkAZgIFCXVzZHRTcGVudAUDYW10CQACAQkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFCXVzZHRTcGVudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUJdXNkdFNwZW50BQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFFHRvdGFsQW1vdW50Q29udmVydGVkBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBHWV4Y2hhbmdlUmVzb3VyY2VzRHVja0RlbGl2ZXJ5AQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDA0MDcyNzQwODMzCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0MDcyNzQwODMzAl8xBAZuZXdNYXQIBQ0kdDA0MDcyNzQwODMzAl8yBAl1c2R0U3BlbnQIBQ0kdDA0MDcyNzQwODMzAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQwNzI3NDA4MzMCXzQEB2ZlZVBhcnQJAGsDBQl1c2R0U3BlbnQFDkRFTElWRVJZX0ZFRTE1BQVNVUxUNgQDZmVlAwkAZgIFF01JTl9VU0RUX0ZFRV9ERUxJVkVSWTE1BQdmZWVQYXJ0BRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpAR1leGNoYW5nZVJlc291cmNlc0xhbmREZWxpdmVyeQIHYW1vdW50cwtsYW5kQXNzZXRJZAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDA0MzA1NjQzMTYyCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0MzA1NjQzMTYyAl8xBAZuZXdNYXQIBQ0kdDA0MzA1NjQzMTYyAl8yBAl1c2R0U3BlbnQIBQ0kdDA0MzA1NjQzMTYyAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQzMDU2NDMxNjICXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpAQpjcmFmdEdvb2RzAgpwcm9kdWN0SWR4CHF1YW50aXR5BAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFBU1VTFQ2CQACAQIqZXhhY3RseSAxIFVTRFQgbXVzdCBiZSBhdHRhY2hlZCBhcyBwYXltZW50AwkAZwIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBTQkAAgEJAKwCAgIxRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBNYW51ZmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQEY29udAkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8DAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFDXJJZHhDb250aW5lbnQDCQECIT0CCQCRAwIFCmNvbnRpbmVudHMFDnByb2R1Y3RDb250SWR4BQRjb250CQACAQkArAICCQCsAgIJAKwCAgIdVGhpcyBwcm9kdWN0IGlzIGF2YWlsYWJsZSBpbiAJAJEDAgUKY29udGluZW50cwUOcHJvZHVjdENvbnRJZHgCESwgYnV0IHlvdSBhcmUgaW4gBQRjb250BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBBmZpbGxlcgIDYWNjC2lnbm9yZWRJdGVtBAFuCAUDYWNjAl8yBAJ4cwMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQCRAwIFCHByb2RMaXN0BQFuAgEwBAF4CQENcGFyc2VJbnRWYWx1ZQEFAnhzBAZhbW91bnQJAGgCBQhxdWFudGl0eQUOUFJPRFVDVFBLR1NJWkUEAXkDCQAAAgUBbgUKcHJvZHVjdElkeAkApAMBCQBkAgUBeAUGYW1vdW50BQJ4cwkAlAoCCQDNCAIIBQNhY2MCXzEFAXkJAGQCBQFuAAEEBmJwUHJvZAgKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBmZpbGxlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8xCgEIcHJvZHVjZXICA2FjYwFqBAduZWVkTWF0CQBoAgkAaAIJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQFqBQVNVUxUNQUIcXVhbnRpdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgQHaGF2ZU1hdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoDCQBmAgUHbmVlZE1hdAUHaGF2ZU1hdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQEKZml4ZWRQb2ludAIFB2hhdmVNYXQACAIEIG9mIAkAkQMCBQhtYXRUeXBlcwUBagIWLCBidXQgcmVjaXBlIHJlcXVpcmVzIAkBCmZpeGVkUG9pbnQCBQduZWVkTWF0AAgCDiBmb3IgcXVhbnRpdHkgCQCkAwEFCHF1YW50aXR5AwkAZgIFB25lZWRNYXQAAAkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFB2hhdmVNYXQFB25lZWRNYXQJAGQCCAUDYWNjAl8yBQduZWVkTWF0CQCUCgIJAM0IAggFA2FjYwJfMQkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8yBAZtZXJnZWQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhwcm9kdWNlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALoJAgUGYnBQcm9kAgFfBQNuaWwCAToEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBDcmFmdAgFBm1lcmdlZAJfMgUFTVVMVDgFA25pbAUDbmlsCQCUCgIFA25pbAkAlQoDBQZyZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC6CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNTI2NzQ1MjkxNAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUKYnBPcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1MjY3NDUyOTE0Al8xBApuZXdVc2VyUmVzCAUNJHQwNTI2NzQ1MjkxNAJfMgQKbmV3VXNlck1hdAgFDSR0MDUyNjc0NTI5MTQCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTI2NzQ1MjkxNAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDUyNjc0NTI5MTQCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1MjY3NDUyOTE0Al82BAh4cEFtb3VudAgFDSR0MDUyNjc0NTI5MTQCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1MjY3NDUyOTE0Al84BApzaG9wV2hTYXZlCAUNJHQwNTI2NzQ1MjkxNAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1MjY3NDUyOTE0A18xMAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyAAAECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyAAAECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAFpARthY2NlcHRTaG9wT3JkZXJEdWNrRGVsaXZlcnkCCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDU0MzUzNTQ1OTEJARVhY2NlcHRTaG9wT3JkZXJDb21tb24GBQ9zaG9wTGFuZEFzc2V0SWQFCmNhbGxlckFkZHIFCG9yZGVyU3RyBQlicFJlc0xpc3QFCWJwTWF0TGlzdAUKYnBQcm9kTGlzdAQKc2hvcEFjdGlvbggFDSR0MDU0MzUzNTQ1OTECXzEECm5ld1VzZXJSZXMIBQ0kdDA1NDM1MzU0NTkxAl8yBApuZXdVc2VyTWF0CAUNJHQwNTQzNTM1NDU5MQJfMwQLbmV3VXNlclByb2QIBQ0kdDA1NDM1MzU0NTkxAl80BA11c2RXaDJCcFNhbGRvCAUNJHQwNTQzNTM1NDU5MQJfNQQNdXNkQnAyV2hTYWxkbwgFDSR0MDU0MzUzNTQ1OTECXzYECHhwQW1vdW50CAUNJHQwNTQzNTM1NDU5MQJfNwQNc2hvcExhbmRPd25lcggFDSR0MDU0MzUzNTQ1OTECXzgECnNob3BXaFNhdmUIBQ0kdDA1NDM1MzU0NTkxAl85BA5hY2NTdGF0c1Jlc3VsdAgFDSR0MDU0MzUzNTQ1OTEDXzEwBA9kZWxpdmVyeUZlZVBhcnQJAGsDCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwUMREVMSVZFUllfRkVFBQVNVUxUNgQLZGVsaXZlcnlGZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQ9kZWxpdmVyeUZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BAhzcGVudEZlZQkAawMFC2RlbGl2ZXJ5RmVlBQ11c2RCcDJXaFNhbGRvCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwQLcmVjZWl2ZWRGZWUJAGUCBQtkZWxpdmVyeUZlZQUIc3BlbnRGZWUECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyBQtyZWNlaXZlZEZlZQQIYWN0aW9uczIJARB1c2VyMnNob3BBY3Rpb25zBAUNdXNkQnAyV2hTYWxkbwgFAWkIcGF5bWVudHMFDXNob3BMYW5kT3duZXIFCHNwZW50RmVlBAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC6CQIFC25ld1VzZXJQcm9kAgFfBQNuaWwCAToEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQPZHVja1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZicFNhdmUFD2R1Y2tTdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQBaQEbYWNjZXB0U2hvcE9yZGVyTGFuZERlbGl2ZXJ5AwhvcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQNbXlMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUNbXlMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFDW15TGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDW15TGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFCmNhbGxlckFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgUNbXlMYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBAhwcm9kTGlzdAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA0kdDA1NjgzMDU3MDYyCQEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBgUPc2hvcExhbmRBc3NldElkBQpjYWxsZXJBZGRyBQhvcmRlclN0cgUHcmVzTGlzdAUHbWF0TGlzdAUIcHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1NjgzMDU3MDYyAl8xBApuZXdVc2VyUmVzCAUNJHQwNTY4MzA1NzA2MgJfMgQKbmV3VXNlck1hdAgFDSR0MDU2ODMwNTcwNjICXzMEC25ld1VzZXJQcm9kCAUNJHQwNTY4MzA1NzA2MgJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU2ODMwNTcwNjICXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1NjgzMDU3MDYyAl82BAh4cEFtb3VudAgFDSR0MDU2ODMwNTcwNjICXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1NjgzMDU3MDYyAl84BApzaG9wV2hTYXZlCAUNJHQwNTY4MzA1NzA2MgJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1NjgzMDU3MDYyA18xMAQPZGVsaXZlcnlGZWVQYXJ0CQBrAwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8FDERFTElWRVJZX0ZFRQUFTVVMVDYEC2RlbGl2ZXJ5RmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFD2RlbGl2ZXJ5RmVlUGFydAQIc3BlbnRGZWUJAGsDBQtkZWxpdmVyeUZlZQUNdXNkQnAyV2hTYWxkbwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8EC3JlY2VpdmVkRmVlCQBlAgULZGVsaXZlcnlGZWUFCHNwZW50RmVlBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgULcmVjZWl2ZWRGZWUECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyBQhzcGVudEZlZQQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC5CQIFC25ld1VzZXJQcm9kAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ1teUxhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQpjYWxsZXJBZGRyCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZ3aFNhdmUFC3N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAFpARBzZWxsUHJvZHVjdHNUb0VTAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUEJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgQWlycG9ydCwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQFZXNLZXkJAQ5rZXlFc1dhcmVob3VzZQAECGV4aXN0U3RyCQCiCAEFBWVzS2V5BAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAoBCG1vdmVQcm9kAgNhY2MJcmVjaXBlU3RyBAFqCAUDYWNjAl8xBAhxdWFudGl0eQMJAGYCCQCQAwEFB2Ftb3VudHMFAWoJAJEDAgUHYW1vdW50cwUBagAAAwkAZgIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEBnJlY2lwZQkAtQkCBQlyZWNpcGVTdHICAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAFCXJlY2lwZVN0cgQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUOUFJPRFVDVFBLR1NJWkUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAULZXhpc3RBbW91bnQDCQBmAgUIcXVhbnRpdHkFBmNhbkJ1eQkAAgEJAKwCAgkArAICCQCsAgICF1dhcmVob3VzZSBjYW4gYnV5IG9ubHkgCQCkAwEFBmNhbkJ1eQIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAl1bml0UHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCUVTQlVZQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQQMYnBQcm9kQW1vdW50AwkAZgIJAJADAQUIcHJvZExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBagAAAwkAZgIFCHF1YW50aXR5BQxicFByb2RBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQxicFByb2RBbW91bnQCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqCQCXCgUJAGQCBQFqAAEJAGQCCAUDYWNjAl8yCQBoAgUJdW5pdFByaWNlBQhxdWFudGl0eQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQxicFByb2RBbW91bnQFCHF1YW50aXR5CQDNCAIIBQNhY2MCXzQJAKQDAQkAZAIFC2V4aXN0QW1vdW50BQhxdWFudGl0eQkAZAIIBQNhY2MCXzUJAGgCBQh0b3RhbE1hdAUIcXVhbnRpdHkEBm1lcmdlZAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlwoFAAAAAAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIbW92ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQIbmV3QnBTdHIJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALoJAggFBm1lcmdlZAJfMwIBXwUDbmlsAgE6BAZicFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQp4cFNlbGxUb0VzCAUGbWVyZ2VkAl81CQBoAgUFTVVMVDgACgUDbmlsBQNuaWwJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlc0tleQkAugkCCAUGbWVyZ2VkAl80AgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMgULdXNkdEFzc2V0SWQFA25pbAkAlQoDBQZicFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEPdXBkYXRlRXNTdG9yYWdlAQpuZXdTdG9yYWdlAwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlFc1dhcmVob3VzZQAFCm5ld1N0b3JhZ2UFA25pbAUKbmV3U3RvcmFnZQFpARR1cGRhdGVEZWxpdmVyeUxvY2tlZAEJbmV3QW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFkZWxpdmVyeUxvY2tlZEtleQUJbmV3QW1vdW50BQNuaWwFCW5ld0Ftb3VudAFpARJzZW5kRGVsaXZlcnlSZXdhcmQBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFC3VzZHRBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGUCBQlmdW5kVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQB2tK+q", "height": 2766948, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2AR9JCgc3UgfKevxfxijBXTXjiLXyqSZddrAuTgM6RWD Next: AU5nix3q2y5WGajwZC8vYea9yZmobABcYrEv4AeZj9M2 Diff:
OldNewDifferences
9999
100100 let X = "deliveryFund"
101101
102-func Y (Z) = (parseIntValue(Z[s]) * q)
102+let Y = "deliveryLocked"
103+
104+func Z (aa) = (parseIntValue(aa[s]) * q)
103105
104106
105-let aa = true
107+let ab = true
106108
107-let ab = take(drop(this.bytes, 1), 1)
109+let ac = take(drop(this.bytes, 1), 1)
108110
109-let ac = {
110- let ad = ab
111- if ((base58'2W' == ad))
111+let ad = {
112+ let ae = ac
113+ if ((base58'2W' == ae))
112114 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
113- else if ((base58'2T' == ad))
115+ else if ((base58'2T' == ae))
114116 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
115117 else throw("Unknown chain")
116118 }
117119
118-let ae = {
119- let ad = ab
120- if ((base58'2W' == ad))
120+let af = {
121+ let ae = ac
122+ if ((base58'2W' == ae))
121123 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
122- else if ((base58'2T' == ad))
124+ else if ((base58'2T' == ae))
123125 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
124126 else throw("Unknown chain")
125127 }
126128
127-let af = "__"
129+let ag = "__"
128130
129-let ag = 100000
131+let ah = 100000
130132
131-let ah = 1000000
133+let ai = 1000000
132134
133-let ai = 100000000
135+let aj = 100000000
134136
135-let aj = 10000000000
137+let ak = 10000000000
136138
137-let ak = 100000
139+let al = 100000
138140
139-let al = [0, 1, 2, 3, 4, 5]
141+let am = [0, 1, 2, 3, 4, 5]
140142
141-func am (an,ao) = valueOrErrorMessage(getString(an, ao), makeString(["mandatory ", toString(an), ".", ao, " is not defined"], ""))
143+func an (ao,ap) = valueOrErrorMessage(getString(ao, ap), makeString(["mandatory ", toString(ao), ".", ap, " is not defined"], ""))
142144
143145
144-let ap = 1
146+let aq = 1
145147
146-let aq = 6
148+let ar = 6
147149
148-let ar = 8
150+let as = 8
149151
150-func as () = "%s__restConfig"
152+func at () = "%s__restConfig"
151153
152154
153-func at () = "%s__restAddr"
155+func au () = "%s__restAddr"
154156
155157
156-func au (av) = split_4C(am(av, as()), af)
158+func av (aw) = split_4C(an(aw, at()), ag)
157159
158160
159-func aw (ax,ay) = valueOrErrorMessage(addressFromString(ax[ay]), ("Rest cfg doesn't contain address at index " + toString(ay)))
161+func ax (ay,az) = valueOrErrorMessage(addressFromString(ay[az]), ("Rest cfg doesn't contain address at index " + toString(az)))
160162
161163
162-let az = addressFromStringValue(valueOrElse(getString(this, at()), ae))
164+let aA = addressFromStringValue(valueOrElse(getString(this, au()), af))
163165
164-let ax = au(az)
166+let ay = av(aA)
165167
166-let aA = aw(ax, ap)
168+let aB = ax(ay, aq)
167169
168-let aB = aw(ax, aq)
170+let aC = ax(ay, ar)
169171
170-let aC = aw(ax, ar)
172+let aD = ax(ay, as)
171173
172-func aD (aE) = {
173- let ad = aE
174- if ($isInstanceOf(ad, "String"))
174+func aE (aF) = {
175+ let ae = aF
176+ if ($isInstanceOf(ae, "String"))
175177 then {
176- let aF = ad
177- aF
178+ let aG = ae
179+ aG
178180 }
179181 else throw("fail to cast into String")
180182 }
181183
182184
183-func aG (aE) = {
184- let ad = aE
185- if ($isInstanceOf(ad, "Int"))
185+func aH (aF) = {
186+ let ae = aF
187+ if ($isInstanceOf(ae, "Int"))
186188 then {
187- let aH = ad
188- aH
189+ let aI = ae
190+ aI
189191 }
190192 else throw("fail to cast into Int")
191193 }
192194
193195
194-func aI () = "contractsBlocked"
196+func aJ () = "contractsBlocked"
195197
196198
197-func aJ (aK,aL) = {
198- let aM = pow(10, 0, aL, 0, 0, DOWN)
199- let aN = toString((aK % aM))
200- let aO = drop(toString(aM), (1 + size(aN)))
201- (((toString((aK / aM)) + ".") + aO) + aN)
199+func aK (aL,aM) = {
200+ let aN = pow(10, 0, aM, 0, 0, DOWN)
201+ let aO = toString((aL % aN))
202+ let aP = drop(toString(aN), (1 + size(aO)))
203+ (((toString((aL / aN)) + ".") + aP) + aO)
202204 }
203205
204206
205-let aP = 10000000000
207+let aQ = 10000000000
206208
207-let aQ = 200
209+let aR = 200
208210
209-let aR = 300
210-
211-let aS = 10000
211+let aS = 300
212212
213213 let aT = 10000
214214
215-let aU = 15000
215+let aU = 10000
216216
217-func aV (aW,aX) = ((("factoryWhByContinentAndRes_" + aW) + "_") + toString(aX))
217+let aV = 15000
218+
219+func aW (aX,aY) = ((("factoryWhByContinentAndRes_" + aX) + "_") + toString(aY))
218220
219221
220-let aY = 0
222+let aZ = 0
221223
222-let aZ = 1
224+let ba = 1
223225
224-let ba = 2
226+let bb = 2
225227
226-func bb (bc) = {
227- let bd = split(valueOrElse(getString(bc), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
228-[if ((size(split(bd[aY], "_")) == f))
229- then bd[aY]
230- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bd[aZ], "_")) == f))
231- then bd[aZ]
232- else "0@0_0@0_0@0_0@0_0@0_0@0", bd[ba]]
228+func bc (bd) = {
229+ let be = split(valueOrElse(getString(bd), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
230+[if ((size(split(be[aZ], "_")) == f))
231+ then be[aZ]
232+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(be[ba], "_")) == f))
233+ then be[ba]
234+ else "0@0_0@0_0@0_0@0_0@0_0@0", be[bb]]
233235 }
234236
235237
236-func be (bf,bg,bh) = if (bh)
238+func bf (bg,bh,bi) = if (bi)
237239 then {
238- let bi = if ((bf >= 0))
239- then (((bf + bg) - 1) / bg)
240- else -((((-(bf) + bg) - 1) / bg))
241- (bi * ai)
240+ let bj = if ((bg >= 0))
241+ then (((bg + bh) - 1) / bh)
242+ else -((((-(bg) + bh) - 1) / bh))
243+ (bj * aj)
242244 }
243- else bf
245+ else bg
244246
245247
246-func bj (bk,aX,bf,bl) = {
247- let bm = aV(bk, aX)
248- let bn = valueOrElse(getInteger(bm), 0)
249- let bo = if ((bn > aP))
248+func bk (bl,aY,bg,bm) = {
249+ let bn = aW(bl, aY)
250+ let bo = valueOrElse(getInteger(bn), 0)
251+ let bp = if ((bo > aQ))
250252 then 0
251- else if (((bn + bf) > aP))
252- then (aP - bn)
253- else bf
254- let bp = (fraction(bo, ((aQ * h) - fraction(((100 * bn) + (50 * bo)), h, aP)), aj) + fraction((bf - bo), h, ai))
255- let bq = (bl - (bl / 100))
256- if (((bq * bf) > (bp * ai)))
257- then throw((((((((((("Actual price = " + toString(bp)) + " / ") + toString(bf)) + " < minPrice = ") + toString(bl)) + ", (") + bk) + ", ") + m[aX]) + ")"))
258- else $Tuple2(IntegerEntry(bm, (bn + bf)), bp)
253+ else if (((bo + bg) > aQ))
254+ then (aQ - bo)
255+ else bg
256+ let bq = (fraction(bp, ((aR * h) - fraction(((100 * bo) + (50 * bp)), h, aQ)), ak) + fraction((bg - bp), h, aj))
257+ let br = (bm - (bm / 100))
258+ if (((br * bg) > (bq * aj)))
259+ then throw((((((((((("Actual price = " + toString(bq)) + " / ") + toString(bg)) + " < minPrice = ") + toString(bm)) + ", (") + bl) + ", ") + m[aY]) + ")"))
260+ else $Tuple2(IntegerEntry(bn, (bo + bg)), bq)
259261 }
260262
261263
262-func br (bk,bs,bf,bt) = {
263- let bm = aV(bk, bs)
264- let bn = valueOrElse(getInteger(bm), 0)
265- let bu = if ((bn > aP))
266- then min([bf, (bn - aP)])
264+func bs (bl,bt,bg,bu) = {
265+ let bn = aW(bl, bt)
266+ let bo = valueOrElse(getInteger(bn), 0)
267+ let bv = if ((bo > aQ))
268+ then min([bg, (bo - aQ)])
267269 else 0
268- let bv = min([bn, (bf - bu)])
269- let bw = (bv + bu)
270- let bx = (fraction(bv, ((aR * h) - fraction(((100 * bn) - (50 * bv)), h, aP)), aj) + fraction(bu, (2 * h), ai))
271- let by = (bt + (bt / 100))
272- if (((bx * ai) > (by * bw)))
273- then throw((((((((((("Actual price = " + toString(bx)) + " / ") + toString(bw)) + " > maxPrice = ") + toString(bt)) + ", (") + bk) + ", ") + n[bs]) + ")"))
274- else $Tuple3(IntegerEntry(bm, (bn - bw)), bx, bw)
270+ let bw = min([bo, (bg - bv)])
271+ let bx = (bw + bv)
272+ let by = (fraction(bw, ((aS * h) - fraction(((100 * bo) - (50 * bw)), h, aQ)), ak) + fraction(bv, (2 * h), aj))
273+ let bz = (bu + (bu / 100))
274+ if (((by * aj) > (bz * bx)))
275+ then throw((((((((((("Actual price = " + toString(by)) + " / ") + toString(bx)) + " > maxPrice = ") + toString(bu)) + ", (") + bl) + ", ") + n[bt]) + ")"))
276+ else $Tuple3(IntegerEntry(bn, (bo - bx)), by, bx)
275277 }
276278
277279
278-func bz (bA) = {
279- let bd = split_4C(valueOrElse(getString(aA, bA), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
280-[toString(valueOrElse(parseInt(bd[D]), 0)), if ((size(split(bd[E], "_")) == f))
281- then bd[E]
282- else "0_0_0_0_0_0", if ((size(split(bd[F], "_")) == f))
283- then bd[F]
284- else "0_0_0_0_0_0", bd[G]]
280+func bA (bB) = {
281+ let be = split_4C(valueOrElse(getString(aB, bB), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
282+[toString(valueOrElse(parseInt(be[D]), 0)), if ((size(split(be[E], "_")) == f))
283+ then be[E]
284+ else "0_0_0_0_0_0", if ((size(split(be[F], "_")) == f))
285+ then be[F]
286+ else "0_0_0_0_0_0", be[G]]
285287 }
286288
287289
288-func bB () = if (valueOrElse(getBoolean(aA, aI()), false))
290+func bC () = if (valueOrElse(getBoolean(aB, aJ()), false))
289291 then throw("Contracts are under maintenance")
290292 else unit
291293
292294
293-func bC () = aG(invoke(aA, "saveLastTx", nil, nil))
295+func bD () = aH(invoke(aB, "saveLastTx", nil, nil))
294296
295297
296-func bD (bE,bF) = {
297- let bG = bE._1
298- let bH = if ((size(bE._10) > bG))
299- then bE._10[bG]
298+func bE (bF,bG) = {
299+ let bH = bF._1
300+ let bI = if ((size(bF._10) > bH))
301+ then bF._10[bH]
300302 else "0@0"
301- let bI = bE._8
302- let bJ = split(bH, "@")
303- if ((size(bJ) != 2))
303+ let bJ = bF._8
304+ let bK = split(bI, "@")
305+ if ((size(bK) != 2))
304306 then throw("Incorrect order format, should be amount@price")
305307 else {
306- let bK = parseIntValue(bJ[0])
307- let bL = parseIntValue(bJ[1])
308- let bM = if (bI)
309- then (bK * bL)
310- else fraction(bK, bL, ai)
311- let bN = be(bK, v, bI)
312- let bO = if ((size(bE._6) > bG))
313- then parseIntValue(bE._6[bG])
308+ let bL = parseIntValue(bK[0])
309+ let bM = parseIntValue(bK[1])
310+ let bN = if (bJ)
311+ then (bL * bM)
312+ else fraction(bL, bM, aj)
313+ let bO = bf(bL, v, bJ)
314+ let bP = if ((size(bF._6) > bH))
315+ then parseIntValue(bF._6[bH])
314316 else 0
315- let bP = split(if ((size(bE._7) > bG))
316- then bE._7[bG]
317+ let bQ = split(if ((size(bF._7) > bH))
318+ then bF._7[bH]
317319 else "0@0", "@")
318- let bQ = parseIntValue(bP[0])
319- let bR = parseIntValue(bP[1])
320- if (if ((0 > bR))
320+ let bR = parseIntValue(bQ[0])
321+ let bS = parseIntValue(bQ[1])
322+ if (if ((0 > bS))
321323 then true
322- else (0 > bL))
324+ else (0 > bM))
323325 then throw("Price can't be negative")
324326 else {
325- let bS = if (bI)
326- then (bQ * bR)
327- else fraction(bQ, bR, ai)
328- if ((bK == 0))
329- then if ((bQ > 0))
330- then $Tuple10((bG + 1), (bE._2 :+ toString(bO)), bE._3, bE._4, (bE._5 - bS), bE._6, bE._7, bI, (bE._9 + be(bO, v, bI)), bE._10)
331- else $Tuple10((bG + 1), (bE._2 :+ toString((bO - bQ))), bE._3, bE._4, bE._5, bE._6, bE._7, bI, (bE._9 + be((bO - bQ), v, bI)), bE._10)
332- else if ((bK > 0))
333- then if ((0 > bQ))
334- then $Tuple10((bG + 1), (bE._2 :+ toString((bO - bQ))), (bE._3 + bN), bE._4, (bE._5 + bM), bE._6, bE._7, bI, be((bO - bQ), v, bI), bE._10)
335- else $Tuple10((bG + 1), (bE._2 :+ toString(bO)), (bE._3 + bN), bE._4, ((bE._5 + bM) - bS), bE._6, bE._7, bI, be(bO, v, bI), bE._10)
336- else if ((0 > bQ))
327+ let bT = if (bJ)
328+ then (bR * bS)
329+ else fraction(bR, bS, aj)
330+ if ((bL == 0))
331+ then if ((bR > 0))
332+ then $Tuple10((bH + 1), (bF._2 :+ toString(bP)), bF._3, bF._4, (bF._5 - bT), bF._6, bF._7, bJ, (bF._9 + bf(bP, v, bJ)), bF._10)
333+ else $Tuple10((bH + 1), (bF._2 :+ toString((bP - bR))), bF._3, bF._4, bF._5, bF._6, bF._7, bJ, (bF._9 + bf((bP - bR), v, bJ)), bF._10)
334+ else if ((bL > 0))
335+ then if ((0 > bR))
336+ then $Tuple10((bH + 1), (bF._2 :+ toString((bP - bR))), (bF._3 + bO), bF._4, (bF._5 + bN), bF._6, bF._7, bJ, bf((bP - bR), v, bJ), bF._10)
337+ else $Tuple10((bH + 1), (bF._2 :+ toString(bP)), (bF._3 + bO), bF._4, ((bF._5 + bN) - bT), bF._6, bF._7, bJ, bf(bP, v, bJ), bF._10)
338+ else if ((0 > bR))
337339 then {
338- let bT = (bQ - bK)
339- if ((0 > (bO - bT)))
340- then throw((((("Attempt to take " + toString(bT)) + " from warehouse, but only ") + toString(bO)) + " available"))
341- else $Tuple10((bG + 1), (bE._2 :+ toString((bO - bT))), bE._3, (bE._4 - bN), bE._5, bE._6, bE._7, bI, be((bO - bT), v, bI), bE._10)
340+ let bU = (bR - bL)
341+ if ((0 > (bP - bU)))
342+ then throw((((("Attempt to take " + toString(bU)) + " from warehouse, but only ") + toString(bP)) + " available"))
343+ else $Tuple10((bH + 1), (bF._2 :+ toString((bP - bU))), bF._3, (bF._4 - bO), bF._5, bF._6, bF._7, bJ, bf((bP - bU), v, bJ), bF._10)
342344 }
343- else if ((0 > (bO + bK)))
344- then throw((((("Attempt to take " + toString(-(bK))) + " from warehouse, but only ") + toString(bO)) + " available"))
345- else $Tuple10((bG + 1), (bE._2 :+ toString((bO + bK))), bE._3, (bE._4 - bN), (bE._5 - bS), bE._6, bE._7, bI, be((bO + bK), v, bI), bE._10)
345+ else if ((0 > (bP + bL)))
346+ then throw((((("Attempt to take " + toString(-(bL))) + " from warehouse, but only ") + toString(bP)) + " available"))
347+ else $Tuple10((bH + 1), (bF._2 :+ toString((bP + bL))), bF._3, (bF._4 - bO), (bF._5 - bT), bF._6, bF._7, bJ, bf((bP + bL), v, bJ), bF._10)
346348 }
347349 }
348350 }
349351
350352
351-func bU (bV,bW,bX) = {
352- let bY = split(bV[x], "_")
353- let bZ = split(bV[y], "_")
354- let ca = if ((bV[z] == ""))
353+func bV (bW,bX,bY) = {
354+ let bZ = split(bW[x], "_")
355+ let ca = split(bW[y], "_")
356+ let cb = if ((bW[z] == ""))
355357 then nil
356- else split_4C(bV[z], "_")
357- let cb = split(bW[aY], "_")
358- let cc = split(bW[aZ], "_")
359- let cd = if ((bW[ba] == ""))
358+ else split_4C(bW[z], "_")
359+ let cc = split(bX[aZ], "_")
360+ let cd = split(bX[ba], "_")
361+ let ce = if ((bX[bb] == ""))
360362 then nil
361- else split_4C(bW[ba], "_")
362- if ((size(bX) != 3))
363+ else split_4C(bX[bb], "_")
364+ if ((size(bY) != 3))
363365 then throw("newOrderStr should contain exactly 2 ':' separators")
364366 else {
365- let ce = split(bX[0], "_")
366- let cf = split(bX[1], "_")
367- let cg = if ((bX[2] == ""))
367+ let cf = split(bY[0], "_")
368+ let cg = split(bY[1], "_")
369+ let ch = if ((bY[2] == ""))
368370 then nil
369- else split_4C(bX[2], "_")
370- if ((size(ce) != f))
371+ else split_4C(bY[2], "_")
372+ if ((size(cf) != f))
371373 then throw("All 6 resources should be passed")
372- else if ((size(cf) != f))
374+ else if ((size(cg) != f))
373375 then throw("All 6 materials should be passed")
374376 else {
375- let ch = {
376- let ci = m
377- let cj = size(ci)
378- let ck = $Tuple10(0, nil, 0, 0, 0, bY, cb, false, 0, ce)
379- func cl (cm,cn) = if ((cn >= cj))
380- then cm
381- else bD(cm, ci[cn])
377+ let ci = {
378+ let cj = m
379+ let ck = size(cj)
380+ let cl = $Tuple10(0, nil, 0, 0, 0, bZ, cc, false, 0, cf)
381+ func cm (cn,co) = if ((co >= ck))
382+ then cn
383+ else bE(cn, cj[co])
382384
383- func co (cm,cn) = if ((cn >= cj))
384- then cm
385+ func cp (cn,co) = if ((co >= ck))
386+ then cn
385387 else throw("List size exceeds 6")
386388
387- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
389+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
388390 }
389- let bw = {
390- let ci = n
391- let cj = size(ci)
392- let ck = $Tuple10(0, nil, ch._3, ch._4, ch._5, bZ, cc, false, ch._9, cf)
393- func cp (cm,cn) = if ((cn >= cj))
394- then cm
395- else bD(cm, ci[cn])
391+ let bx = {
392+ let cj = n
393+ let ck = size(cj)
394+ let cl = $Tuple10(0, nil, ci._3, ci._4, ci._5, ca, cd, false, ci._9, cg)
395+ func cq (cn,co) = if ((co >= ck))
396+ then cn
397+ else bE(cn, cj[co])
396398
397- func cq (cm,cn) = if ((cn >= cj))
398- then cm
399+ func cr (cn,co) = if ((co >= ck))
400+ then cn
399401 else throw("List size exceeds 6")
400402
401- cq(cp(cp(cp(cp(cp(cp(ck, 0), 1), 2), 3), 4), 5), 6)
403+ cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
402404 }
403- let bd = {
404- let ci = o
405- let cj = size(ci)
406- let ck = $Tuple10(0, nil, bw._3, bw._4, bw._5, ca, cd, true, bw._9, cg)
407- func cr (cm,cn) = if ((cn >= cj))
408- then cm
409- else bD(cm, ci[cn])
405+ let be = {
406+ let cj = o
407+ let ck = size(cj)
408+ let cl = $Tuple10(0, nil, bx._3, bx._4, bx._5, cb, ce, true, bx._9, ch)
409+ func cs (cn,co) = if ((co >= ck))
410+ then cn
411+ else bE(cn, cj[co])
410412
411- func cs (cm,cn) = if ((cn >= cj))
412- then cm
413+ func ct (cn,co) = if ((co >= ck))
414+ then cn
413415 else throw("List size exceeds 50")
414416
415- cs(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(ck, 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)
417+ ct(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cl, 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)
416418 }
417- $Tuple7(ch._2, bw._2, bd._2, bd._3, bd._4, bd._5, bd._9)
419+ $Tuple7(ci._2, bx._2, be._2, be._3, be._4, be._5, be._9)
418420 }
419421 }
420422 }
421423
422424
423-func ct (bE,cu) = {
424- let bG = bE._7
425- let bI = bE._12
426- let cv = split(cu, "@")
427- if ((size(cv) != 2))
425+func cu (bF,cv) = {
426+ let bH = bF._7
427+ let bJ = bF._12
428+ let cw = split(cv, "@")
429+ if ((size(cw) != 2))
428430 then throw("Incorrect order format, should be amount@price")
429431 else {
430- let cw = parseIntValue(cv[0])
431- let cx = parseIntValue(cv[1])
432- if ((0 > cx))
432+ let cx = parseIntValue(cw[0])
433+ let cy = parseIntValue(cw[1])
434+ if ((0 > cy))
433435 then throw("Price can't be negative")
434436 else {
435- let cy = if (bI)
436- then (cw * cx)
437- else fraction(cw, cx, ai)
438- let cz = if ((size(bE._8) > bG))
439- then parseIntValue(bE._8[bG])
437+ let cz = if (bJ)
438+ then (cx * cy)
439+ else fraction(cx, cy, aj)
440+ let cA = if ((size(bF._8) > bH))
441+ then parseIntValue(bF._8[bH])
440442 else 0
441- let bO = if ((size(bE._9) > bG))
442- then parseIntValue(bE._9[bG])
443+ let bP = if ((size(bF._9) > bH))
444+ then parseIntValue(bF._9[bH])
443445 else 0
444- let cA = if ((size(bE._10) > bG))
445- then bE._10[bG]
446+ let cB = if ((size(bF._10) > bH))
447+ then bF._10[bH]
446448 else "0@0"
447- let cB = split(cA, "@")
448- let cC = parseIntValue(cB[0])
449- let cD = parseIntValue(cB[1])
450- if (if ((cw != 0))
451- then (cx != cD)
449+ let cC = split(cB, "@")
450+ let cD = parseIntValue(cC[0])
451+ let cE = parseIntValue(cC[1])
452+ if (if ((cx != 0))
453+ then (cy != cE)
452454 else false)
453- then throw(((((("Prices of " + bE._11[bG]) + " don't match! WH price=") + toString(cD)) + ", your price=") + toString(cx)))
455+ then throw(((((("Prices of " + bF._11[bH]) + " don't match! WH price=") + toString(cE)) + ", your price=") + toString(cy)))
454456 else {
455- let cE = if (bI)
456- then (cC * cD)
457- else fraction(cC, cD, ai)
458- let cF = be(cw, v, bI)
459- if ((cw == 0))
460- then $Tuple13((bE._1 :+ toString(bO)), (bE._2 :+ cA), (bE._3 :+ toString(cz)), bE._4, bE._5, bE._6, (bE._7 + 1), bE._8, bE._9, bE._10, bE._11, bI, bE._13)
461- else if ((cw > 0))
462- then if ((0 > cC))
463- then if ((cw > -(cC)))
464- then throw(((((("Attempt to buy " + toString(cw)) + " of ") + bE._11[bG]) + ", but warehouse only sells ") + toString(-(cC))))
465- else $Tuple13((bE._1 :+ toString(bO)), (bE._2 :+ ((toString((cC + cw)) + "@") + toString(cD))), (bE._3 :+ toString((cz + cw))), (bE._4 + cF), bE._5, (bE._6 + cy), (bE._7 + 1), bE._8, bE._9, bE._10, bE._11, bI, (bE._13 + (if (bI)
466- then (cw * ai)
467- else cw)))
468- else throw((("Attempt to buy " + bE._11[bG]) + " while warehouse doesn't sell it"))
469- else if ((cC > 0))
470- then if ((-(cw) > cC))
471- then throw(((((("Attempt to sell " + toString(-(cw))) + " of ") + bE._11[bG]) + ", but warehouse only buys ") + toString(cC)))
472- else if ((-(cw) > cz))
473- then throw(((((("Attempt to sell " + toString(-(cw))) + ", but you only have ") + toString(cz)) + " of ") + bE._11[bG]))
474- else $Tuple13((bE._1 :+ toString((bO - cw))), (bE._2 :+ ((toString((cC + cw)) + "@") + toString(cD))), (bE._3 :+ toString((cz + cw))), (bE._4 - cF), (bE._5 - cy), bE._6, (bE._7 + 1), bE._8, bE._9, bE._10, bE._11, bI, (bE._13 - (if (bI)
475- then (cw * ai)
476- else cw)))
477- else throw((("Attempt to sell " + bE._11[bG]) + " while warehouse doesn't buy it"))
457+ let cF = if (bJ)
458+ then (cD * cE)
459+ else fraction(cD, cE, aj)
460+ let cG = bf(cx, v, bJ)
461+ if ((cx == 0))
462+ then $Tuple13((bF._1 :+ toString(bP)), (bF._2 :+ cB), (bF._3 :+ toString(cA)), bF._4, bF._5, bF._6, (bF._7 + 1), bF._8, bF._9, bF._10, bF._11, bJ, bF._13)
463+ else if ((cx > 0))
464+ then if ((0 > cD))
465+ then if ((cx > -(cD)))
466+ then throw(((((("Attempt to buy " + toString(cx)) + " of ") + bF._11[bH]) + ", but warehouse only sells ") + toString(-(cD))))
467+ else $Tuple13((bF._1 :+ toString(bP)), (bF._2 :+ ((toString((cD + cx)) + "@") + toString(cE))), (bF._3 :+ toString((cA + cx))), (bF._4 + cG), bF._5, (bF._6 + cz), (bF._7 + 1), bF._8, bF._9, bF._10, bF._11, bJ, (bF._13 + (if (bJ)
468+ then (cx * aj)
469+ else cx)))
470+ else throw((("Attempt to buy " + bF._11[bH]) + " while warehouse doesn't sell it"))
471+ else if ((cD > 0))
472+ then if ((-(cx) > cD))
473+ then throw(((((("Attempt to sell " + toString(-(cx))) + " of ") + bF._11[bH]) + ", but warehouse only buys ") + toString(cD)))
474+ else if ((-(cx) > cA))
475+ then throw(((((("Attempt to sell " + toString(-(cx))) + ", but you only have ") + toString(cA)) + " of ") + bF._11[bH]))
476+ else $Tuple13((bF._1 :+ toString((bP - cx))), (bF._2 :+ ((toString((cD + cx)) + "@") + toString(cE))), (bF._3 :+ toString((cA + cx))), (bF._4 - cG), (bF._5 - cz), bF._6, (bF._7 + 1), bF._8, bF._9, bF._10, bF._11, bJ, (bF._13 - (if (bJ)
477+ then (cx * aj)
478+ else cx)))
479+ else throw((("Attempt to sell " + bF._11[bH]) + " while warehouse doesn't buy it"))
478480 }
479481 }
480482 }
481483 }
482484
483485
484-func cG (cH,cI,cJ,cK) = {
485- func cL (bE,bG) = if ((cJ[bG] > parseIntValue(cH[bG])))
486- then throw(((((("You have " + cH[bG]) + " of ") + m[bG]) + ", but tried to sell ") + toString(cJ[bG])))
487- else if ((0 > cJ[bG]))
488- then throw(((("You tried to sell negative amount of " + m[bG]) + ": ") + toString(cJ[bG])))
489- else if ((cJ[bG] > 0))
486+func cH (cI,cJ,cK,cL) = {
487+ func cM (bF,bH) = if ((cK[bH] > parseIntValue(cI[bH])))
488+ then throw(((((("You have " + cI[bH]) + " of ") + m[bH]) + ", but tried to sell ") + toString(cK[bH])))
489+ else if ((0 > cK[bH]))
490+ then throw(((("You tried to sell negative amount of " + m[bH]) + ": ") + toString(cK[bH])))
491+ else if ((cK[bH] > 0))
490492 then {
491- let cM = bj(cI, bG, cJ[bG], cK[bG])
492- $Tuple4((bE._1 :+ cM._1), (bE._2 :+ toString((parseIntValue(cH[bG]) - cJ[bG]))), (bE._3 + cM._2), (bE._4 + cJ[bG]))
493+ let cN = bk(cJ, bH, cK[bH], cL[bH])
494+ $Tuple4((bF._1 :+ cN._1), (bF._2 :+ toString((parseIntValue(cI[bH]) - cK[bH]))), (bF._3 + cN._2), (bF._4 + cK[bH]))
493495 }
494- else $Tuple4(bE._1, (bE._2 :+ cH[bG]), bE._3, bE._4)
496+ else $Tuple4(bF._1, (bF._2 :+ cI[bH]), bF._3, bF._4)
495497
496- let ci = al
497- let cj = size(ci)
498- let ck = $Tuple4(nil, nil, 0, 0)
499- func cl (cm,cn) = if ((cn >= cj))
500- then cm
501- else cL(cm, ci[cn])
498+ let cj = am
499+ let ck = size(cj)
500+ let cl = $Tuple4(nil, nil, 0, 0)
501+ func cm (cn,co) = if ((co >= ck))
502+ then cn
503+ else cM(cn, cj[co])
502504
503- func co (cm,cn) = if ((cn >= cj))
504- then cm
505+ func cp (cn,co) = if ((co >= ck))
506+ then cn
505507 else throw("List size exceeds 6")
506508
507- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
509+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
508510 }
509511
510512
511-func cN (cO,cI,cJ,cP) = {
512- func cQ (bE,bG) = if ((0 > cJ[bG]))
513- then throw(((("You tried to buy negative amount of " + n[bG]) + ": ") + toString(cJ[bG])))
514- else if ((cJ[bG] > 0))
513+func cO (cP,cJ,cK,cQ) = {
514+ func cR (bF,bH) = if ((0 > cK[bH]))
515+ then throw(((("You tried to buy negative amount of " + n[bH]) + ": ") + toString(cK[bH])))
516+ else if ((cK[bH] > 0))
515517 then {
516- let cM = br(cI, bG, cJ[bG], cP[bG])
517- $Tuple4((bE._1 :+ cM._1), (bE._2 :+ toString((parseIntValue(cO[bG]) + cM._3))), (bE._3 + cM._2), (bE._4 + cJ[bG]))
518+ let cN = bs(cJ, bH, cK[bH], cQ[bH])
519+ $Tuple4((bF._1 :+ cN._1), (bF._2 :+ toString((parseIntValue(cP[bH]) + cN._3))), (bF._3 + cN._2), (bF._4 + cK[bH]))
518520 }
519- else $Tuple4(bE._1, (bE._2 :+ cO[bG]), bE._3, bE._4)
521+ else $Tuple4(bF._1, (bF._2 :+ cP[bH]), bF._3, bF._4)
520522
521- let ci = al
522- let cj = size(ci)
523- let ck = $Tuple4(nil, nil, 0, 0)
524- func cl (cm,cn) = if ((cn >= cj))
525- then cm
526- else cQ(cm, ci[cn])
523+ let cj = am
524+ let ck = size(cj)
525+ let cl = $Tuple4(nil, nil, 0, 0)
526+ func cm (cn,co) = if ((co >= ck))
527+ then cn
528+ else cR(cn, cj[co])
527529
528- func co (cm,cn) = if ((cn >= cj))
529- then cm
530+ func cp (cn,co) = if ((co >= ck))
531+ then cn
530532 else throw("List size exceeds 6")
531533
532- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
534+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
533535 }
534536
535537
536-func cR (cH,cO,cJ) = {
537- func cS (bE,bG) = {
538- let cT = cJ[bG]
539- if ((cT > parseIntValue(cH[bG])))
540- then throw(((((("You have " + cH[bG]) + " of ") + m[bG]) + ", but tried to exchange ") + toString(cT)))
541- else if ((0 > cT))
542- then throw(((("You tried to exchange negative amount of " + m[bG]) + ": ") + toString(cT)))
543- else if ((cT > 0))
544- then $Tuple4((bE._1 :+ toString((parseIntValue(cH[bG]) - cT))), (bE._2 :+ toString((parseIntValue(cO[bG]) + cT))), (bE._3 + fraction(cT, h, ai)), (bE._4 + cT))
545- else $Tuple4((bE._1 :+ cH[bG]), (bE._2 :+ cO[bG]), bE._3, bE._4)
538+func cS (cI,cP,cK) = {
539+ func cT (bF,bH) = {
540+ let cU = cK[bH]
541+ if ((cU > parseIntValue(cI[bH])))
542+ then throw(((((("You have " + cI[bH]) + " of ") + m[bH]) + ", but tried to exchange ") + toString(cU)))
543+ else if ((0 > cU))
544+ then throw(((("You tried to exchange negative amount of " + m[bH]) + ": ") + toString(cU)))
545+ else if ((cU > 0))
546+ then $Tuple4((bF._1 :+ toString((parseIntValue(cI[bH]) - cU))), (bF._2 :+ toString((parseIntValue(cP[bH]) + cU))), (bF._3 + fraction(cU, h, aj)), (bF._4 + cU))
547+ else $Tuple4((bF._1 :+ cI[bH]), (bF._2 :+ cP[bH]), bF._3, bF._4)
546548 }
547549
548- let ci = al
549- let cj = size(ci)
550- let ck = $Tuple4(nil, nil, 0, 0)
551- func cl (cm,cn) = if ((cn >= cj))
552- then cm
553- else cS(cm, ci[cn])
550+ let cj = am
551+ let ck = size(cj)
552+ let cl = $Tuple4(nil, nil, 0, 0)
553+ func cm (cn,co) = if ((co >= ck))
554+ then cn
555+ else cT(cn, cj[co])
554556
555- func co (cm,cn) = if ((cn >= cj))
556- then cm
557+ func cp (cn,co) = if ((co >= ck))
558+ then cn
557559 else throw("List size exceeds 6")
558560
559- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
561+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
560562 }
561563
562564
563-func cU (cV,cW,cX) = if ((cV > 0))
565+func cV (cW,cX,cY) = if ((cW > 0))
564566 then {
565- let cY = fraction(cV, aS, ah)
566- if ((cX >= (cV - (3 * cY))))
567- then throw(("This trade does not cover delivery cost of " + aJ(cX, 6)))
567+ let cZ = fraction(cW, aT, ai)
568+ if ((cY >= (cW - (3 * cZ))))
569+ then throw(("This trade does not cover delivery cost of " + aK(cY, 6)))
568570 else {
569- let cZ = N(cW)
570- let da = getString(aA, cZ)
571- let db = addressFromStringValue(cW)
572- (((if (isDefined(da))
573- then [ScriptTransfer(addressFromStringValue(value(da)), cY, ac)]
574- else nil) :+ ScriptTransfer(db, ((cV - (3 * cY)) - cX), ac)) :+ ScriptTransfer(az, cY, ac))
571+ let da = N(cX)
572+ let db = getString(aB, da)
573+ let dc = addressFromStringValue(cX)
574+ (((if (isDefined(db))
575+ then [ScriptTransfer(addressFromStringValue(value(db)), cZ, ad)]
576+ else nil) :+ ScriptTransfer(dc, ((cW - (3 * cZ)) - cY), ad)) :+ ScriptTransfer(aA, cZ, ad))
575577 }
576578 }
577579 else nil
578580
579581
580-func dc (dd,de,df,dg) = if ((dd > 0))
581- then if ((size(de) != 1))
582+func dd (de,df,dg,dh) = if ((de > 0))
583+ then if ((size(df) != 1))
582584 then throw("exactly 1 payment must be attached")
583585 else {
584- let dh = de[0]
585- let di = dh.amount
586- if (if (!(isDefined(dh.assetId)))
586+ let di = df[0]
587+ let dj = di.amount
588+ if (if (!(isDefined(di.assetId)))
587589 then true
588- else (value(dh.assetId) != ac))
590+ else (value(di.assetId) != ad))
589591 then throw("USDT payments only!")
590592 else {
591- let dj = (dd + dg)
592- if ((di != dj))
593- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(dd, 6)) + "+") + aJ(dg, 6)) + "(delivery fee)"))
594- else if ((ak > dd))
595- then throw(("Min shop trade is " + aJ(ak, 6)))
593+ let dk = (de + dh)
594+ if ((dj != dk))
595+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(de, 6)) + "+") + aK(dh, 6)) + "(delivery fee)"))
596+ else if ((al > de))
597+ then throw(("Min shop trade is " + aK(al, 6)))
596598 else {
597- let dk = fraction(dd, aS, ah)
598- let cZ = N(df)
599- let da = getString(aA, cZ)
600- (((if (isDefined(da))
601- then [ScriptTransfer(addressFromStringValue(value(da)), dk, ac)]
602- else nil) :+ ScriptTransfer(addressFromStringValue(df), (dd - (3 * dk)), ac)) :+ ScriptTransfer(az, dk, ac))
599+ let dl = fraction(de, aT, ai)
600+ let da = N(dg)
601+ let db = getString(aB, da)
602+ (((if (isDefined(db))
603+ then [ScriptTransfer(addressFromStringValue(value(db)), dl, ad)]
604+ else nil) :+ ScriptTransfer(addressFromStringValue(dg), (de - (3 * dl)), ad)) :+ ScriptTransfer(aA, dl, ad))
603605 }
604606 }
605607 }
606- else if ((size(de) != 0))
608+ else if ((size(df) != 0))
607609 then throw("No payments needed")
608610 else nil
609611
610612
611-func dl (dm,cW,dn,do,dp,dq) = {
612- let dr = value(assetInfo(fromBase58String(dm)))
613- if (!(isDefined(getInteger(aA, M(dm)))))
614- then throw((("NFT " + dr.name) + " is not staked"))
613+func dm (dn,cX,do,dp,dq,dr) = {
614+ let ds = value(assetInfo(fromBase58String(dn)))
615+ if (!(isDefined(getInteger(aB, M(dn)))))
616+ then throw((("NFT " + ds.name) + " is not staked"))
615617 else {
616- let df = valueOrErrorMessage(getString(aA, K(dm)), (("NFT " + dr.name) + " is orphaned"))
617- if ((df == cW))
618+ let dg = valueOrErrorMessage(getString(aB, K(dn)), (("NFT " + ds.name) + " is orphaned"))
619+ if ((dg == cX))
618620 then throw("You cannot trade with yourself")
619621 else {
620- let ds = split_4C(dn, ":")
621- if ((size(ds) != 3))
622+ let dt = split_4C(do, ":")
623+ if ((size(dt) != 3))
622624 then throw("bpOrderStr should contain exactly 2 ':' separators")
623625 else {
624- let dt = split(ds[0], "_")
625- let du = split(ds[1], "_")
626- let dv = if ((ds[2] == ""))
626+ let du = split(dt[0], "_")
627+ let dv = split(dt[1], "_")
628+ let dw = if ((dt[2] == ""))
627629 then nil
628- else split_4C(ds[2], "_")
629- if ((size(dt) != f))
630+ else split_4C(dt[2], "_")
631+ if ((size(du) != f))
630632 then throw("All 6 resources should be passed")
631- else if ((size(du) != f))
633+ else if ((size(dv) != f))
632634 then throw("All 6 materials should be passed")
633635 else {
634- let dw = aD(invoke(aA, "getWarehouseREADONLY", [dm], nil))
635- let bV = split_4C(dw, ":")
636- let bY = split(bV[x], "_")
637- let bZ = split(bV[y], "_")
638- let ca = if ((bV[z] == ""))
636+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [dn], nil))
637+ let bW = split_4C(dx, ":")
638+ let bZ = split(bW[x], "_")
639+ let ca = split(bW[y], "_")
640+ let cb = if ((bW[z] == ""))
639641 then nil
640- else split_4C(bV[z], "_")
641- let dx = parseIntValue(split(bV[A], "_")[B])
642- let bc = U(dm)
643- let dy = bb(bc)
644- let dz = split(dy[aY], "_")
645- let dA = split(dy[aZ], "_")
646- let dB = if ((dy[ba] == ""))
642+ else split_4C(bW[z], "_")
643+ let dy = parseIntValue(split(bW[A], "_")[B])
644+ let bd = U(dn)
645+ let dz = bc(bd)
646+ let dA = split(dz[aZ], "_")
647+ let dB = split(dz[ba], "_")
648+ let dC = if ((dz[bb] == ""))
647649 then nil
648- else split_4C(dy[ba], "_")
649- let ch = {
650- let ci = dt
651- let cj = size(ci)
652- let ck = $Tuple13(nil, nil, nil, 0, 0, 0, 0, do, bY, dz, m, false, 0)
653- func cl (cm,cn) = if ((cn >= cj))
654- then cm
655- else ct(cm, ci[cn])
650+ else split_4C(dz[bb], "_")
651+ let ci = {
652+ let cj = du
653+ let ck = size(cj)
654+ let cl = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dp, bZ, dA, m, false, 0)
655+ func cm (cn,co) = if ((co >= ck))
656+ then cn
657+ else cu(cn, cj[co])
656658
657- func co (cm,cn) = if ((cn >= cj))
658- then cm
659+ func cp (cn,co) = if ((co >= ck))
660+ then cn
659661 else throw("List size exceeds 6")
660662
661- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
663+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
662664 }
663- let bw = {
664- let ci = du
665- let cj = size(ci)
666- let ck = $Tuple13(nil, nil, nil, ch._4, ch._5, ch._6, 0, dp, bZ, dA, n, false, ch._13)
667- func cp (cm,cn) = if ((cn >= cj))
668- then cm
669- else ct(cm, ci[cn])
665+ let bx = {
666+ let cj = dv
667+ let ck = size(cj)
668+ let cl = $Tuple13(nil, nil, nil, ci._4, ci._5, ci._6, 0, dq, ca, dB, n, false, ci._13)
669+ func cq (cn,co) = if ((co >= ck))
670+ then cn
671+ else cu(cn, cj[co])
670672
671- func cq (cm,cn) = if ((cn >= cj))
672- then cm
673+ func cr (cn,co) = if ((co >= ck))
674+ then cn
673675 else throw("List size exceeds 6")
674676
675- cq(cp(cp(cp(cp(cp(cp(ck, 0), 1), 2), 3), 4), 5), 6)
677+ cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
676678 }
677- let bd = if ((size(dv) != 0))
679+ let be = if ((size(dw) != 0))
678680 then {
679- let ci = dv
680- let cj = size(ci)
681- let ck = $Tuple13(nil, nil, nil, bw._4, bw._5, bw._6, 0, dq, ca, dB, o, true, bw._13)
682- func cr (cm,cn) = if ((cn >= cj))
683- then cm
684- else ct(cm, ci[cn])
681+ let cj = dw
682+ let ck = size(cj)
683+ let cl = $Tuple13(nil, nil, nil, bx._4, bx._5, bx._6, 0, dr, cb, dC, o, true, bx._13)
684+ func cs (cn,co) = if ((co >= ck))
685+ then cn
686+ else cu(cn, cj[co])
685687
686- func cs (cm,cn) = if ((cn >= cj))
687- then cm
688+ func ct (cn,co) = if ((co >= ck))
689+ then cn
688690 else throw("List size exceeds 50")
689691
690- cs(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(ck, 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)
692+ ct(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cl, 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)
691693 }
692- else $Tuple13(ca, dB, dq, bw._4, bw._5, bw._6, 0, dq, ca, dB, o, true, bw._13)
693- let dC = bd._4
694- let dD = if ((0 > (dx - dC)))
694+ else $Tuple13(cb, dC, dr, bx._4, bx._5, bx._6, 0, dr, cb, dC, o, true, bx._13)
695+ let dD = be._4
696+ let dE = if ((0 > (dy - dD)))
695697 then 0
696- else (dx - dC)
697- let dE = makeString_2C([bV[w], makeString(ch._1, "_"), makeString(bw._1, "_"), makeString_2C(bd._1, "_"), toString(dD)], ":")
698- let dF = makeString_2C([makeString(ch._2, "_"), makeString(bw._2, "_"), makeString_2C(bd._2, "_")], ":")
699- let dG = aD(invoke(aA, "saveWarehouse", [dE, dm], nil))
700- let dH = aG(invoke(aA, "updateAccStats", [df, fraction(d, bd._13, ai)], nil))
701- $Tuple10(StringEntry(bc, dF), ch._3, bw._3, bd._3, bd._5, bd._6, bd._13, df, dG, dH)
698+ else (dy - dD)
699+ let dF = makeString_2C([bW[w], makeString(ci._1, "_"), makeString(bx._1, "_"), makeString_2C(be._1, "_"), toString(dE)], ":")
700+ let dG = makeString_2C([makeString(ci._2, "_"), makeString(bx._2, "_"), makeString_2C(be._2, "_")], ":")
701+ let dH = aE(invoke(aB, "saveWarehouse", [dF, dn], nil))
702+ let dI = aH(invoke(aB, "updateAccStats", [dg, fraction(d, be._13, aj)], nil))
703+ $Tuple10(StringEntry(bd, dG), ci._3, bx._3, be._3, be._5, be._6, be._13, dg, dH, dI)
702704 }
703705 }
704706 }
706708 }
707709
708710
709-@Callable(dI)
710-func recalcLockedVolumeREADONLY (V,dw) = {
711- let bW = bb(U(V))
712- let dJ = bU(dw, bW, bW)
713- $Tuple2(nil, (dJ._4 + dJ._5))
711+@Callable(dJ)
712+func recalcLockedVolumeREADONLY (V,dx) = {
713+ let bX = bc(U(V))
714+ let dK = bV(dx, bX, bX)
715+ $Tuple2(nil, (dK._4 + dK._5))
714716 }
715717
716718
717719
718-@Callable(dI)
719-func constructorV1 (dK) = if ((dI.caller != this))
720+@Callable(dJ)
721+func constructorV1 (dL) = if ((dJ.caller != this))
720722 then throw("Permission denied")
721- else [StringEntry(at(), dK)]
723+ else [StringEntry(au(), dL)]
722724
723725
724726
725-@Callable(dI)
726-func sellResources (cJ,cK) = {
727- let dL = bC()
728- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
729- if ((size(dI.payments) != 0))
727+@Callable(dJ)
728+func sellResources (cK,cL) = {
729+ let dM = bD()
730+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
731+ if ((size(dJ.payments) != 0))
730732 then throw("sellResources doesn't require any payments")
731733 else {
732- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
733- if ((dM[I] != "F"))
734- then throw(("Duck location type should be Factory, but is " + dM[I]))
734+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
735+ if ((dN[I] != "F"))
736+ then throw(("Duck location type should be Factory, but is " + dN[I]))
735737 else {
736- let dN = bz(R(S))
737- let cH = split(dN[E], "_")
738- let dO = cG(cH, dM[J], cJ, cK)
739- let dP = dO._1
740- let dQ = dO._2
741- let bp = dO._3
742- let dR = dO._4
743- let dS = (bp / 100)
744- let dT = makeString_2C([dN[D], makeString(dQ, "_"), dN[F], dN[G]], ":")
745- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
746- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, dR, ai)], nil))
747- $Tuple2(((dP :+ ScriptTransfer(dI.caller, (bp - dS), ac)) :+ ScriptTransfer(az, dS, ac)), $Tuple3(dU, dL, dV))
738+ let dO = bA(R(S))
739+ let cI = split(dO[E], "_")
740+ let dP = cH(cI, dN[J], cK, cL)
741+ let dQ = dP._1
742+ let dR = dP._2
743+ let bq = dP._3
744+ let dS = dP._4
745+ let dT = (bq / 100)
746+ let dU = makeString_2C([dO[D], makeString(dR, "_"), dO[F], dO[G]], ":")
747+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
748+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
749+ $Tuple2(((dQ :+ ScriptTransfer(dJ.caller, (bq - dT), ad)) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dV, dM, dW))
748750 }
749751 }
750752 }
751753
752754
753755
754-@Callable(dI)
755-func sellResourcesWorld (O,bf) = if ((dI.caller != aC))
756+@Callable(dJ)
757+func sellResourcesWorld (O,bg) = if ((dJ.caller != aD))
756758 then throw("Permission denied")
757759 else {
758- let dW = (bf / 30)
759- let dX = [dW, dW, dW, dW, dW, dW]
760- let aF = toString(dW)
761- let cH = [aF, aF, aF, aF, aF, aF]
762- let cK = [0, 0, 0, 0, 0, 0]
763- func dY (bE,dZ) = {
764- let ea = cG(cH, dZ, dX, cK)
765- $Tuple3((bE._1 :+ ea._1), (bE._2 + ea._3), (bE._3 + ea._4))
760+ let dX = (bg / 30)
761+ let dY = [dX, dX, dX, dX, dX, dX]
762+ let aG = toString(dX)
763+ let cI = [aG, aG, aG, aG, aG, aG]
764+ let cL = [0, 0, 0, 0, 0, 0]
765+ func dZ (bF,ea) = {
766+ let eb = cH(cI, ea, dY, cL)
767+ $Tuple3((bF._1 :+ eb._1), (bF._2 + eb._3), (bF._3 + eb._4))
766768 }
767769
768- let eb = {
769- let ci = p
770- let cj = size(ci)
771- let ck = $Tuple3(nil, 0, 0)
772- func cl (cm,cn) = if ((cn >= cj))
773- then cm
774- else dY(cm, ci[cn])
770+ let ec = {
771+ let cj = p
772+ let ck = size(cj)
773+ let cl = $Tuple3(nil, 0, 0)
774+ func cm (cn,co) = if ((co >= ck))
775+ then cn
776+ else dZ(cn, cj[co])
775777
776- func co (cm,cn) = if ((cn >= cj))
777- then cm
778+ func cp (cn,co) = if ((co >= ck))
779+ then cn
778780 else throw("List size exceeds 5")
779781
780- co(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5)
782+ cp(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5)
781783 }
782- let dP = eb._1
783- let bp = eb._2
784- let dR = eb._3
785- let dV = aG(invoke(aA, "updateAccStats", [O, fraction(a, dR, ai)], nil))
786- let ec = fraction(bp, aT, ah)
787- let ed = if ((k > ec))
784+ let dQ = ec._1
785+ let bq = ec._2
786+ let dS = ec._3
787+ let dW = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
788+ let ed = fraction(bq, aU, ai)
789+ let ee = if ((k > ed))
788790 then k
789- else ec
790- let dS = (bp / 100)
791- if ((ed >= (bp - dS)))
792- then throw(("This trade does not cover delivery cost of " + aJ(ed, 6)))
791+ else ed
792+ let dT = (bq / 100)
793+ if ((ee >= (bq - dT)))
794+ then throw(("This trade does not cover delivery cost of " + aK(ee, 6)))
793795 else {
794- let ee = ((bp - dS) - ed)
795- $Tuple2((((dP :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + ed))) :+ ScriptTransfer(az, dS, ac)) :+ ScriptTransfer(aB, ee, ac)), $Tuple2(ee, dV))
796+ let ef = ((bq - dT) - ee)
797+ $Tuple2((((dQ :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + ee))) :+ ScriptTransfer(aA, dT, ad)) :+ ScriptTransfer(aC, ef, ad)), $Tuple2(ef, dW))
796798 }
797799 }
798800
799801
800802
801-@Callable(dI)
802-func sellResourcesDuckDelivery (cJ,cK,ef) = if (!(aa))
803+@Callable(dJ)
804+func sellResourcesDuckDelivery (cK,cL,eg) = if (!(ab))
803805 then throw("Delivery feature is turned off!")
804806 else {
805- let dL = bC()
806- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
807- if ((size(dI.payments) != 0))
807+ let dM = bD()
808+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
809+ if ((size(dJ.payments) != 0))
808810 then throw("sellResources doesn't require any payments")
809811 else {
810- let dN = bz(R(S))
811- let cH = split(dN[E], "_")
812- let eg = cG(cH, ef, cJ, cK)
813- let dP = eg._1
814- let dQ = eg._2
815- let bp = eg._3
816- let dR = eg._4
817- let dT = makeString_2C([dN[D], makeString(dQ, "_"), dN[F], dN[G]], ":")
818- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
819- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, dR, ai)], nil))
820- let ec = fraction(bp, aT, ah)
821- let ed = if ((k > ec))
812+ let dO = bA(R(S))
813+ let cI = split(dO[E], "_")
814+ let eh = cH(cI, eg, cK, cL)
815+ let dQ = eh._1
816+ let dR = eh._2
817+ let bq = eh._3
818+ let dS = eh._4
819+ let dU = makeString_2C([dO[D], makeString(dR, "_"), dO[F], dO[G]], ":")
820+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
821+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
822+ let ed = fraction(bq, aU, ai)
823+ let ee = if ((k > ed))
822824 then k
823- else ec
824- let dS = (bp / 100)
825- if ((ed >= (bp - dS)))
826- then throw(("This trade does not cover delivery cost of " + aJ(ed, 6)))
825+ else ed
826+ let dT = (bq / 100)
827+ if ((ee >= (bq - dT)))
828+ then throw(("This trade does not cover delivery cost of " + aK(ee, 6)))
827829 else {
828- let eh = valueOrElse(getInteger(X), 0)
829- $Tuple2((((dP :+ ScriptTransfer(dI.caller, ((bp - dS) - ed), ac)) :+ IntegerEntry(X, (eh + ed))) :+ ScriptTransfer(az, dS, ac)), $Tuple3(dU, dL, dV))
830+ let ei = valueOrElse(getInteger(X), 0)
831+ $Tuple2((((dQ :+ ScriptTransfer(dJ.caller, ((bq - dT) - ee), ad)) :+ IntegerEntry(X, (ei + ee))) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dV, dM, dW))
830832 }
831833 }
832834 }
833835
834836
835837
836-@Callable(dI)
837-func sellResourcesLandDelivery (cJ,cK,V,ef) = if (!(aa))
838+@Callable(dJ)
839+func sellResourcesLandDelivery (cK,cL,V,eg) = if (!(ab))
838840 then throw("Delivery feature is turned off!")
839841 else {
840- let dL = bC()
841- if ((size(dI.payments) != 0))
842+ let dM = bD()
843+ if ((size(dJ.payments) != 0))
842844 then throw("sellResources doesn't require any payments")
843845 else {
844- let ei = dI.caller
845- let O = toString(ei)
846- let ej = value(assetInfo(fromBase58String(V)))
847- if (!(isDefined(getInteger(aA, M(V)))))
848- then throw((("NFT " + ej.name) + " is not staked"))
846+ let ej = dJ.caller
847+ let O = toString(ej)
848+ let ek = value(assetInfo(fromBase58String(V)))
849+ if (!(isDefined(getInteger(aB, M(V)))))
850+ then throw((("NFT " + ek.name) + " is not staked"))
849851 else {
850- let ek = valueOrErrorMessage(getString(aA, K(V)), (("NFT " + ej.name) + " is orphaned"))
851- if ((ek != O))
852+ let el = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + ek.name) + " is orphaned"))
853+ if ((el != O))
852854 then throw((e + " is not yours"))
853855 else {
854- let dw = aD(invoke(aA, "getWarehouseREADONLY", [V], nil))
855- let bV = split_4C(dw, ":")
856- let cH = split(bV[x], "_")
857- let el = cG(cH, ef, cJ, cK)
858- let dP = el._1
859- let dQ = el._2
860- let bp = el._3
861- let dR = el._4
862- let dE = makeString_2C([bV[w], makeString(dQ, "_"), bV[y], bV[z], bV[A]], ":")
863- let dG = aD(invoke(aA, "saveWarehouse", [dE, V], nil))
864- let dV = aG(invoke(aA, "updateAccStats", [O, fraction(a, dR, ai)], nil))
865- let ec = fraction(bp, aT, ah)
866- let ed = if ((k > ec))
856+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
857+ let bW = split_4C(dx, ":")
858+ let cI = split(bW[x], "_")
859+ let em = cH(cI, eg, cK, cL)
860+ let dQ = em._1
861+ let dR = em._2
862+ let bq = em._3
863+ let dS = em._4
864+ let dF = makeString_2C([bW[w], makeString(dR, "_"), bW[y], bW[z], bW[A]], ":")
865+ let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
866+ let dW = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
867+ let ed = fraction(bq, aU, ai)
868+ let ee = if ((k > ed))
867869 then k
868- else ec
869- let dS = (bp / 100)
870- if ((ed >= (bp - dS)))
871- then throw(("This trade does not cover delivery cost of " + aJ(ed, 6)))
870+ else ed
871+ let dT = (bq / 100)
872+ if ((ee >= (bq - dT)))
873+ then throw(("This trade does not cover delivery cost of " + aK(ee, 6)))
872874 else {
873- let eh = valueOrElse(getInteger(X), 0)
874- $Tuple2((((dP :+ ScriptTransfer(dI.caller, ((bp - dS) - ed), ac)) :+ IntegerEntry(X, (eh + ed))) :+ ScriptTransfer(az, dS, ac)), $Tuple3(dG, dL, dV))
875+ let ei = valueOrElse(getInteger(X), 0)
876+ $Tuple2((((dQ :+ ScriptTransfer(dJ.caller, ((bq - dT) - ee), ad)) :+ IntegerEntry(X, (ei + ee))) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dH, dM, dW))
875877 }
876878 }
877879 }
880882
881883
882884
883-@Callable(dI)
884-func buyMaterials (cJ,cP) = {
885- let dL = bC()
886- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
887- if ((size(dI.payments) != 1))
885+@Callable(dJ)
886+func buyMaterials (cK,cQ) = {
887+ let dM = bD()
888+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
889+ if ((size(dJ.payments) != 1))
888890 then throw("exactly 1 payment must be attached")
889891 else {
890- let dh = dI.payments[0]
891- let di = dh.amount
892- if (if (!(isDefined(dh.assetId)))
892+ let di = dJ.payments[0]
893+ let dj = di.amount
894+ if (if (!(isDefined(di.assetId)))
893895 then true
894- else (value(dh.assetId) != ac))
896+ else (value(di.assetId) != ad))
895897 then throw("USDT payments only!")
896898 else {
897- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
898- if ((dM[I] != "F"))
899- then throw(("Duck location type should be Factory, but is " + dM[I]))
899+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
900+ if ((dN[I] != "F"))
901+ then throw(("Duck location type should be Factory, but is " + dN[I]))
900902 else {
901- let dN = bz(R(S))
902- let cO = split(dN[F], "_")
903- let em = cN(cO, dM[J], cJ, cP)
904- let dP = em._1
905- let en = em._2
906- let bx = em._3
907- let eo = em._4
908- if ((bx > di))
909- then throw(((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)))
903+ let dO = bA(R(S))
904+ let cP = split(dO[F], "_")
905+ let en = cO(cP, dN[J], cK, cQ)
906+ let dQ = en._1
907+ let eo = en._2
908+ let by = en._3
909+ let ep = en._4
910+ if ((by > dj))
911+ then throw(((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)))
910912 else {
911- let dT = makeString([dN[D], dN[E], makeString(en, "_"), dN[G]], ":")
912- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
913- let av = if (((di - bx) > 0))
914- then [ScriptTransfer(dI.caller, (di - bx), ac)]
913+ let dU = makeString([dO[D], dO[E], makeString(eo, "_"), dO[G]], ":")
914+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
915+ let aw = if (((dj - by) > 0))
916+ then [ScriptTransfer(dJ.caller, (dj - by), ad)]
915917 else nil
916- let dS = (bx / 100)
917- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, eo, ai)], nil))
918- $Tuple2(((dP ++ av) :+ ScriptTransfer(az, dS, ac)), $Tuple3(dU, dL, dV))
918+ let dT = (by / 100)
919+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ep, aj)], nil))
920+ $Tuple2(((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dV, dM, dW))
919921 }
920922 }
921923 }
924926
925927
926928
927-@Callable(dI)
928-func buyMaterialsDuckDelivery (cJ,cP,ef) = if (!(aa))
929+@Callable(dJ)
930+func buyMaterialsDuckDelivery (cK,cQ,eg) = if (!(ab))
929931 then throw("Delivery feature is turned off!")
930932 else {
931- let dL = bC()
932- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
933- if ((size(dI.payments) != 1))
933+ let dM = bD()
934+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
935+ if ((size(dJ.payments) != 1))
934936 then throw("exactly 1 payment must be attached")
935937 else {
936- let dh = dI.payments[0]
937- let di = dh.amount
938- if (if (!(isDefined(dh.assetId)))
938+ let di = dJ.payments[0]
939+ let dj = di.amount
940+ if (if (!(isDefined(di.assetId)))
939941 then true
940- else (value(dh.assetId) != ac))
942+ else (value(di.assetId) != ad))
941943 then throw("USDT payments only!")
942944 else {
943- let dN = bz(R(S))
944- let cO = split(dN[F], "_")
945- let ep = cN(cO, ef, cJ, cP)
946- let dP = ep._1
947- let en = ep._2
948- let bx = ep._3
949- let eo = ep._4
950- let dT = makeString([dN[D], dN[E], makeString(en, "_"), dN[G]], ":")
951- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
952- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, eo, ai)], nil))
953- let ec = fraction(bx, aT, ah)
954- let ed = if ((k > ec))
945+ let dO = bA(R(S))
946+ let cP = split(dO[F], "_")
947+ let eq = cO(cP, eg, cK, cQ)
948+ let dQ = eq._1
949+ let eo = eq._2
950+ let by = eq._3
951+ let ep = eq._4
952+ let dU = makeString([dO[D], dO[E], makeString(eo, "_"), dO[G]], ":")
953+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
954+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ep, aj)], nil))
955+ let ed = fraction(by, aU, ai)
956+ let ee = if ((k > ed))
955957 then k
956- else ec
957- let dj = (bx + ed)
958- if ((dj > di))
959- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)) + "+") + aJ(ed, 6)) + "(delivery fee)"))
958+ else ed
959+ let dk = (by + ee)
960+ if ((dk > dj))
961+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(ee, 6)) + "(delivery fee)"))
960962 else {
961- let av = if (((di - dj) > 0))
962- then [ScriptTransfer(dI.caller, (di - dj), ac)]
963+ let aw = if (((dj - dk) > 0))
964+ then [ScriptTransfer(dJ.caller, (dj - dk), ad)]
963965 else nil
964- let dS = (bx / 100)
965- let eh = valueOrElse(getInteger(X), 0)
966- $Tuple2((((dP ++ av) :+ ScriptTransfer(az, dS, ac)) :+ IntegerEntry(X, (eh + ed))), $Tuple3(dU, dL, dV))
966+ let dT = (by / 100)
967+ let ei = valueOrElse(getInteger(X), 0)
968+ $Tuple2((((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ei + ee))), $Tuple3(dV, dM, dW))
967969 }
968970 }
969971 }
971973
972974
973975
974-@Callable(dI)
975-func buyMaterialsLandDelivery (cJ,cP,V,ef) = if (!(aa))
976+@Callable(dJ)
977+func buyMaterialsLandDelivery (cK,cQ,V,eg) = if (!(ab))
976978 then throw("Delivery feature is turned off!")
977979 else {
978- let dL = bC()
979- if ((size(dI.payments) != 1))
980+ let dM = bD()
981+ if ((size(dJ.payments) != 1))
980982 then throw("exactly 1 payment must be attached")
981983 else {
982- let dh = dI.payments[0]
983- let di = dh.amount
984- if (if (!(isDefined(dh.assetId)))
984+ let di = dJ.payments[0]
985+ let dj = di.amount
986+ if (if (!(isDefined(di.assetId)))
985987 then true
986- else (value(dh.assetId) != ac))
988+ else (value(di.assetId) != ad))
987989 then throw("USDT payments only!")
988990 else {
989- let ei = dI.caller
990- let O = toString(ei)
991- let ej = value(assetInfo(fromBase58String(V)))
992- if (!(isDefined(getInteger(aA, M(V)))))
993- then throw((("NFT " + ej.name) + " is not staked"))
991+ let ej = dJ.caller
992+ let O = toString(ej)
993+ let ek = value(assetInfo(fromBase58String(V)))
994+ if (!(isDefined(getInteger(aB, M(V)))))
995+ then throw((("NFT " + ek.name) + " is not staked"))
994996 else {
995- let ek = valueOrErrorMessage(getString(aA, K(V)), (("NFT " + ej.name) + " is orphaned"))
996- if ((ek != O))
997+ let el = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + ek.name) + " is orphaned"))
998+ if ((el != O))
997999 then throw((e + " is not yours"))
9981000 else {
999- let dw = aD(invoke(aA, "getWarehouseREADONLY", [V], nil))
1000- let bV = split_4C(dw, ":")
1001- let cO = split(bV[y], "_")
1002- let eq = cN(cO, ef, cJ, cP)
1003- let dP = eq._1
1004- let en = eq._2
1005- let bx = eq._3
1006- let eo = eq._4
1007- let dE = makeString_2C([bV[w], bV[x], makeString(en, "_"), bV[z], bV[A]], ":")
1008- let dG = aD(invoke(aA, "saveWarehouse", [dE, V], nil))
1009- let dV = aG(invoke(aA, "updateAccStats", [O, fraction(a, eo, ai)], nil))
1010- let ec = fraction(bx, aT, ah)
1011- let ed = if ((k > ec))
1001+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1002+ let bW = split_4C(dx, ":")
1003+ let cP = split(bW[y], "_")
1004+ let er = cO(cP, eg, cK, cQ)
1005+ let dQ = er._1
1006+ let eo = er._2
1007+ let by = er._3
1008+ let ep = er._4
1009+ let dF = makeString_2C([bW[w], bW[x], makeString(eo, "_"), bW[z], bW[A]], ":")
1010+ let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1011+ let dW = aH(invoke(aB, "updateAccStats", [O, fraction(a, ep, aj)], nil))
1012+ let ed = fraction(by, aU, ai)
1013+ let ee = if ((k > ed))
10121014 then k
1013- else ec
1014- let dj = (bx + ed)
1015- if ((dj > di))
1016- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)) + "+") + aJ(ed, 6)) + "(delivery fee)"))
1015+ else ed
1016+ let dk = (by + ee)
1017+ if ((dk > dj))
1018+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(ee, 6)) + "(delivery fee)"))
10171019 else {
1018- let av = if (((di - dj) > 0))
1019- then [ScriptTransfer(dI.caller, (di - dj), ac)]
1020+ let aw = if (((dj - dk) > 0))
1021+ then [ScriptTransfer(dJ.caller, (dj - dk), ad)]
10201022 else nil
1021- let dS = (bx / 100)
1022- let eh = valueOrElse(getInteger(X), 0)
1023- $Tuple2((((dP ++ av) :+ ScriptTransfer(az, dS, ac)) :+ IntegerEntry(X, (eh + ed))), $Tuple3(dG, dL, dV))
1023+ let dT = (by / 100)
1024+ let ei = valueOrElse(getInteger(X), 0)
1025+ $Tuple2((((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ei + ee))), $Tuple3(dH, dM, dW))
10241026 }
10251027 }
10261028 }
10301032
10311033
10321034
1033-@Callable(dI)
1034-func exchangeResources (cJ) = {
1035- let dL = bC()
1036- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
1037- if ((size(dI.payments) != 1))
1035+@Callable(dJ)
1036+func exchangeResources (cK) = {
1037+ let dM = bD()
1038+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
1039+ if ((size(dJ.payments) != 1))
10381040 then throw("exactly 1 payment must be attached")
10391041 else {
1040- let dh = dI.payments[0]
1041- let di = dh.amount
1042- if (if (!(isDefined(dh.assetId)))
1042+ let di = dJ.payments[0]
1043+ let dj = di.amount
1044+ if (if (!(isDefined(di.assetId)))
10431045 then true
1044- else (value(dh.assetId) != ac))
1046+ else (value(di.assetId) != ad))
10451047 then throw("USDT payments only!")
10461048 else {
1047- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
1048- if ((dM[I] != "F"))
1049- then throw(("Duck location type should be Factory, but is " + dM[I]))
1049+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
1050+ if ((dN[I] != "F"))
1051+ then throw(("Duck location type should be Factory, but is " + dN[I]))
10501052 else {
1051- let dN = bz(R(S))
1052- let cH = split(dN[E], "_")
1053- let cO = split(dN[F], "_")
1054- let er = cR(cH, cO, cJ)
1055- let dQ = er._1
1056- let en = er._2
1057- let bx = er._3
1058- let es = er._4
1059- if ((bx > di))
1060- then throw(((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)))
1053+ let dO = bA(R(S))
1054+ let cI = split(dO[E], "_")
1055+ let cP = split(dO[F], "_")
1056+ let es = cS(cI, cP, cK)
1057+ let dR = es._1
1058+ let eo = es._2
1059+ let by = es._3
1060+ let et = es._4
1061+ if ((by > dj))
1062+ then throw(((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)))
10611063 else {
1062- let dT = makeString([dN[D], makeString(dQ, "_"), makeString(en, "_"), dN[G]], ":")
1063- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
1064- let av = if (((di - bx) > 0))
1065- then [ScriptTransfer(dI.caller, (di - bx), ac)]
1064+ let dU = makeString([dO[D], makeString(dR, "_"), makeString(eo, "_"), dO[G]], ":")
1065+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
1066+ let aw = if (((dj - by) > 0))
1067+ then [ScriptTransfer(dJ.caller, (dj - by), ad)]
10661068 else nil
1067- let dS = (bx / 100)
1068- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, es, ai)], nil))
1069- $Tuple2((av :+ ScriptTransfer(az, dS, ac)), $Tuple3(dU, dL, dV))
1069+ let dT = (by / 100)
1070+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, et, aj)], nil))
1071+ $Tuple2((aw :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dV, dM, dW))
10701072 }
10711073 }
10721074 }
10751077
10761078
10771079
1078-@Callable(dI)
1079-func exchangeResourcesDuckDelivery (cJ) = {
1080- let dL = bC()
1081- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
1082- if ((size(dI.payments) != 1))
1080+@Callable(dJ)
1081+func exchangeResourcesDuckDelivery (cK) = {
1082+ let dM = bD()
1083+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
1084+ if ((size(dJ.payments) != 1))
10831085 then throw("exactly 1 payment must be attached")
10841086 else {
1085- let dh = dI.payments[0]
1086- let di = dh.amount
1087- if (if (!(isDefined(dh.assetId)))
1087+ let di = dJ.payments[0]
1088+ let dj = di.amount
1089+ if (if (!(isDefined(di.assetId)))
10881090 then true
1089- else (value(dh.assetId) != ac))
1091+ else (value(di.assetId) != ad))
10901092 then throw("USDT payments only!")
10911093 else {
1092- let dN = bz(R(S))
1093- let cH = split(dN[E], "_")
1094- let cO = split(dN[F], "_")
1095- let et = cR(cH, cO, cJ)
1096- let dQ = et._1
1097- let en = et._2
1098- let bx = et._3
1099- let es = et._4
1100- let ec = fraction(bx, aU, ah)
1101- let ed = if ((l > ec))
1094+ let dO = bA(R(S))
1095+ let cI = split(dO[E], "_")
1096+ let cP = split(dO[F], "_")
1097+ let eu = cS(cI, cP, cK)
1098+ let dR = eu._1
1099+ let eo = eu._2
1100+ let by = eu._3
1101+ let et = eu._4
1102+ let ed = fraction(by, aV, ai)
1103+ let ee = if ((l > ed))
11021104 then l
1103- else ec
1104- let dj = (bx + ed)
1105- if ((dj > di))
1106- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)) + "+") + aJ(ed, 6)) + "(delivery fee)"))
1105+ else ed
1106+ let dk = (by + ee)
1107+ if ((dk > dj))
1108+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(ee, 6)) + "(delivery fee)"))
11071109 else {
1108- let dT = makeString([dN[D], makeString(dQ, "_"), makeString(en, "_"), dN[G]], ":")
1109- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
1110- let av = if (((di - dj) > 0))
1111- then [ScriptTransfer(dI.caller, (di - dj), ac)]
1110+ let dU = makeString([dO[D], makeString(dR, "_"), makeString(eo, "_"), dO[G]], ":")
1111+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
1112+ let aw = if (((dj - dk) > 0))
1113+ then [ScriptTransfer(dJ.caller, (dj - dk), ad)]
11121114 else nil
1113- let dS = (bx / 100)
1114- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, es, ai)], nil))
1115- let eh = valueOrElse(getInteger(X), 0)
1116- $Tuple2(((av :+ ScriptTransfer(az, dS, ac)) :+ IntegerEntry(X, (eh + ed))), $Tuple3(dU, dL, dV))
1115+ let dT = (by / 100)
1116+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, et, aj)], nil))
1117+ let ei = valueOrElse(getInteger(X), 0)
1118+ $Tuple2(((aw :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ei + ee))), $Tuple3(dV, dM, dW))
11171119 }
11181120 }
11191121 }
11211123
11221124
11231125
1124-@Callable(dI)
1125-func exchangeResourcesLandDelivery (cJ,V) = {
1126- let dL = bC()
1127- if ((size(dI.payments) != 1))
1126+@Callable(dJ)
1127+func exchangeResourcesLandDelivery (cK,V) = {
1128+ let dM = bD()
1129+ if ((size(dJ.payments) != 1))
11281130 then throw("exactly 1 payment must be attached")
11291131 else {
1130- let dh = dI.payments[0]
1131- let di = dh.amount
1132- if (if (!(isDefined(dh.assetId)))
1132+ let di = dJ.payments[0]
1133+ let dj = di.amount
1134+ if (if (!(isDefined(di.assetId)))
11331135 then true
1134- else (value(dh.assetId) != ac))
1136+ else (value(di.assetId) != ad))
11351137 then throw("USDT payments only!")
11361138 else {
1137- let ei = dI.caller
1138- let O = toString(ei)
1139- let ej = value(assetInfo(fromBase58String(V)))
1140- if (!(isDefined(getInteger(aA, M(V)))))
1141- then throw((("NFT " + ej.name) + " is not staked"))
1139+ let ej = dJ.caller
1140+ let O = toString(ej)
1141+ let ek = value(assetInfo(fromBase58String(V)))
1142+ if (!(isDefined(getInteger(aB, M(V)))))
1143+ then throw((("NFT " + ek.name) + " is not staked"))
11421144 else {
1143- let ek = valueOrErrorMessage(getString(aA, K(V)), (("NFT " + ej.name) + " is orphaned"))
1144- if ((ek != O))
1145+ let el = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + ek.name) + " is orphaned"))
1146+ if ((el != O))
11451147 then throw((e + " is not yours"))
11461148 else {
1147- let dw = aD(invoke(aA, "getWarehouseREADONLY", [V], nil))
1148- let bV = split_4C(dw, ":")
1149- let cH = split(bV[x], "_")
1150- let cO = split(bV[y], "_")
1151- let eu = cR(cH, cO, cJ)
1152- let dQ = eu._1
1153- let en = eu._2
1154- let bx = eu._3
1155- let es = eu._4
1156- let dE = makeString_2C([bV[w], makeString(dQ, "_"), makeString(en, "_"), bV[z], bV[A]], ":")
1157- let dG = aD(invoke(aA, "saveWarehouse", [dE, V], nil))
1158- let dV = aG(invoke(aA, "updateAccStats", [O, fraction(a, es, ai)], nil))
1159- let ec = fraction(bx, aU, ah)
1160- let ed = if ((l > ec))
1149+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1150+ let bW = split_4C(dx, ":")
1151+ let cI = split(bW[x], "_")
1152+ let cP = split(bW[y], "_")
1153+ let ev = cS(cI, cP, cK)
1154+ let dR = ev._1
1155+ let eo = ev._2
1156+ let by = ev._3
1157+ let et = ev._4
1158+ let dF = makeString_2C([bW[w], makeString(dR, "_"), makeString(eo, "_"), bW[z], bW[A]], ":")
1159+ let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1160+ let dW = aH(invoke(aB, "updateAccStats", [O, fraction(a, et, aj)], nil))
1161+ let ed = fraction(by, aV, ai)
1162+ let ee = if ((l > ed))
11611163 then l
1162- else ec
1163- let dj = (bx + ed)
1164- if ((dj > di))
1165- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)) + "+") + aJ(ed, 6)) + "(delivery fee)"))
1164+ else ed
1165+ let dk = (by + ee)
1166+ if ((dk > dj))
1167+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(ee, 6)) + "(delivery fee)"))
11661168 else {
1167- let av = if (((di - dj) > 0))
1168- then [ScriptTransfer(dI.caller, (di - dj), ac)]
1169+ let aw = if (((dj - dk) > 0))
1170+ then [ScriptTransfer(dJ.caller, (dj - dk), ad)]
11691171 else nil
1170- let dS = (bx / 100)
1171- let eh = valueOrElse(getInteger(X), 0)
1172- $Tuple2(((av :+ ScriptTransfer(az, dS, ac)) :+ IntegerEntry(X, (eh + ed))), $Tuple3(dG, dL, dV))
1172+ let dT = (by / 100)
1173+ let ei = valueOrElse(getInteger(X), 0)
1174+ $Tuple2(((aw :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ei + ee))), $Tuple3(dH, dM, dW))
11731175 }
11741176 }
11751177 }
11791181
11801182
11811183
1182-@Callable(dI)
1183-func craftGoods (ev,ew) = {
1184- let dL = bC()
1185- if ((size(dI.payments) != 1))
1184+@Callable(dJ)
1185+func craftGoods (ew,ex) = {
1186+ let dM = bD()
1187+ if ((size(dJ.payments) != 1))
11861188 then throw("exactly 1 payment must be attached")
11871189 else {
1188- let dh = dI.payments[0]
1189- let di = dh.amount
1190- let ex = valueOrErrorMessage(dh.assetId, "WAVES can't be used as payment")
1191- if ((ex != ac))
1190+ let di = dJ.payments[0]
1191+ let dj = di.amount
1192+ let ey = valueOrErrorMessage(di.assetId, "WAVES can't be used as payment")
1193+ if ((ey != ad))
11921194 then throw("USDT payments only!")
1193- else if ((di != ah))
1195+ else if ((dj != ai))
11941196 then throw("exactly 1 USDT must be attached as payment")
1195- else if ((0 >= ew))
1197+ else if ((0 >= ex))
11961198 then throw("Quantity should be positive")
11971199 else {
1198- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
1199- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
1200- if ((dM[I] != "M"))
1201- then throw(("Duck location type should be Manufactory, but is " + dM[I]))
1200+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
1201+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
1202+ if ((dN[I] != "M"))
1203+ then throw(("Duck location type should be Manufactory, but is " + dN[I]))
12021204 else {
1203- let ey = dM[H]
1204- let dN = bz(R(S))
1205- let cO = split(dN[F], "_")
1206- if (if ((0 > ev))
1205+ let ez = dN[H]
1206+ let dO = bA(R(S))
1207+ let cP = split(dO[F], "_")
1208+ if (if ((0 > ew))
12071209 then true
1208- else (ev >= size(r)))
1209- then throw(("Unknown product idx=" + toString(ev)))
1210+ else (ew >= size(r)))
1211+ then throw(("Unknown product idx=" + toString(ew)))
12101212 else {
1211- let Z = split(r[ev], "_")
1212- if ((size(Z) != u))
1213- then throw(("Fatal: unknown recipe: " + r[ev]))
1213+ let aa = split(r[ew], "_")
1214+ if ((size(aa) != u))
1215+ then throw(("Fatal: unknown recipe: " + r[ew]))
12141216 else {
1215- let ez = parseIntValue(Z[t])
1216- if ((p[ez] != ey))
1217- then throw(((("This product is available in " + p[ez]) + ", but you are in ") + ey))
1217+ let eA = parseIntValue(aa[t])
1218+ if ((p[eA] != ez))
1219+ then throw(((("This product is available in " + p[eA]) + ", but you are in ") + ez))
12181220 else {
1219- let eA = if ((dN[G] == ""))
1221+ let eB = if ((dO[G] == ""))
12201222 then nil
1221- else split_4C(dN[G], "_")
1222- func eB (bE,eC) = {
1223- let aH = bE._2
1224- let eD = if ((size(eA) > aH))
1225- then eA[aH]
1223+ else split_4C(dO[G], "_")
1224+ func eC (bF,eD) = {
1225+ let aI = bF._2
1226+ let eE = if ((size(eB) > aI))
1227+ then eB[aI]
12261228 else "0"
1227- let ea = parseIntValue(eD)
1228- let bf = (ew * v)
1229- let eE = if ((aH == ev))
1230- then toString((ea + bf))
1231- else eD
1232- $Tuple2((bE._1 :+ eE), (aH + 1))
1229+ let eb = parseIntValue(eE)
1230+ let bg = (ex * v)
1231+ let eF = if ((aI == ew))
1232+ then toString((eb + bg))
1233+ else eE
1234+ $Tuple2((bF._1 :+ eF), (aI + 1))
12331235 }
12341236
1235- let eF = ( let ci = r
1236- let cj = size(ci)
1237- let ck = $Tuple2(nil, 0)
1238- func cl (cm,cn) = if ((cn >= cj))
1239- then cm
1240- else eB(cm, ci[cn])
1237+ let eG = ( let cj = r
1238+ let ck = size(cj)
1239+ let cl = $Tuple2(nil, 0)
1240+ func cm (cn,co) = if ((co >= ck))
1241+ then cn
1242+ else eC(cn, cj[co])
12411243
1242- func co (cm,cn) = if ((cn >= cj))
1243- then cm
1244+ func cp (cn,co) = if ((co >= ck))
1245+ then cn
12441246 else throw("List size exceeds 50")
12451247
1246- co(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(ck, 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
1247- func eG (bE,bG) = {
1248- let eH = (((parseIntValue(Z[bG]) * ag) * ew) * parseIntValue(Z[s]))
1249- let eI = parseIntValue(cO[bG])
1250- if ((eH > eI))
1251- then throw(((((((("You have " + aJ(eI, 8)) + " of ") + n[bG]) + ", but recipe requires ") + aJ(eH, 8)) + " for quantity ") + toString(ew)))
1252- else if ((eH > 0))
1253- then $Tuple2((bE._1 :+ toString((eI - eH))), (bE._2 + eH))
1254- else $Tuple2((bE._1 :+ cO[bG]), bE._2)
1248+ cp(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cl, 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
1249+ func eH (bF,bH) = {
1250+ let eI = (((parseIntValue(aa[bH]) * ah) * ex) * parseIntValue(aa[s]))
1251+ let eJ = parseIntValue(cP[bH])
1252+ if ((eI > eJ))
1253+ then throw(((((((("You have " + aK(eJ, 8)) + " of ") + n[bH]) + ", but recipe requires ") + aK(eI, 8)) + " for quantity ") + toString(ex)))
1254+ else if ((eI > 0))
1255+ then $Tuple2((bF._1 :+ toString((eJ - eI))), (bF._2 + eI))
1256+ else $Tuple2((bF._1 :+ cP[bH]), bF._2)
12551257 }
12561258
1257- let eJ = {
1258- let ci = al
1259- let cj = size(ci)
1260- let ck = $Tuple2(nil, 0)
1261- func cp (cm,cn) = if ((cn >= cj))
1262- then cm
1263- else eG(cm, ci[cn])
1259+ let eK = {
1260+ let cj = am
1261+ let ck = size(cj)
1262+ let cl = $Tuple2(nil, 0)
1263+ func cq (cn,co) = if ((co >= ck))
1264+ then cn
1265+ else eH(cn, cj[co])
12641266
1265- func cq (cm,cn) = if ((cn >= cj))
1266- then cm
1267+ func cr (cn,co) = if ((co >= ck))
1268+ then cn
12671269 else throw("List size exceeds 6")
12681270
1269- cq(cp(cp(cp(cp(cp(cp(ck, 0), 1), 2), 3), 4), 5), 6)
1271+ cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
12701272 }
1271- let dT = makeString([dN[D], dN[E], makeString(eJ._1, "_"), makeString_2C(eF, "_")], ":")
1272- let eK = aD(invoke(aA, "updateBackpack", [S, dT], nil))
1273- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(b, eJ._2, ai)], nil))
1274- $Tuple2(nil, $Tuple3(eK, dL, dV))
1273+ let dU = makeString([dO[D], dO[E], makeString(eK._1, "_"), makeString_2C(eG, "_")], ":")
1274+ let eL = aE(invoke(aB, "updateBackpack", [S, dU], nil))
1275+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(b, eK._2, aj)], nil))
1276+ $Tuple2(nil, $Tuple3(eL, dM, dW))
12751277 }
12761278 }
12771279 }
12821284
12831285
12841286
1285-@Callable(dI)
1286-func setWarehouseOrder (eL,V) = {
1287- let ei = dI.originCaller
1288- let O = toString(ei)
1289- let eK = if ((ei != az))
1290- then bB()
1287+@Callable(dJ)
1288+func setWarehouseOrder (eM,V) = {
1289+ let ej = dJ.originCaller
1290+ let O = toString(ej)
1291+ let eL = if ((ej != aA))
1292+ then bC()
12911293 else false
1292- let ej = value(assetInfo(fromBase58String(V)))
1293- if (!(isDefined(getInteger(aA, M(V)))))
1294- then throw((("NFT " + ej.name) + " is not staked"))
1294+ let ek = value(assetInfo(fromBase58String(V)))
1295+ if (!(isDefined(getInteger(aB, M(V)))))
1296+ then throw((("NFT " + ek.name) + " is not staked"))
12951297 else {
1296- let ek = valueOrErrorMessage(getString(aA, K(V)), (("NFT " + ej.name) + " is orphaned"))
1297- if (if ((ei != az))
1298- then (ek != O)
1298+ let el = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + ek.name) + " is orphaned"))
1299+ if (if ((ej != aA))
1300+ then (el != O)
12991301 else false)
13001302 then throw((e + " is not yours"))
13011303 else {
1302- let eM = split_4C(eL, ":")
1303- let dw = aD(invoke(aA, "getWarehouseREADONLY", [V], nil))
1304- let bV = split_4C(dw, ":")
1305- let eN = split(bV[A], "_")
1306- let eO = parseIntValue(eN[C])
1307- let bc = U(V)
1308- let bW = bb(bc)
1309- let dJ = bU(bV, bW, eM)
1310- let eP = dJ._4
1311- let eQ = dJ._5
1312- let eR = dJ._7
1313- let eS = (eP + eQ)
1314- let eT = ((eO - eR) - eS)
1315- if ((0 > eT))
1316- then throw((((((("Attempt to reserve " + toString(eP)) + " space for buy orders, and ") + toString(eQ)) + " space for sell orders (and occupied=") + toString(eR)) + "), leads to negative free space"))
1304+ let eN = split_4C(eM, ":")
1305+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1306+ let bW = split_4C(dx, ":")
1307+ let eO = split(bW[A], "_")
1308+ let eP = parseIntValue(eO[C])
1309+ let bd = U(V)
1310+ let bX = bc(bd)
1311+ let dK = bV(bW, bX, eN)
1312+ let eQ = dK._4
1313+ let eR = dK._5
1314+ let eS = dK._7
1315+ let eT = (eQ + eR)
1316+ let eU = ((eP - eS) - eT)
1317+ if ((0 > eU))
1318+ then throw((((((("Attempt to reserve " + toString(eQ)) + " space for buy orders, and ") + toString(eR)) + " space for sell orders (and occupied=") + toString(eS)) + "), leads to negative free space"))
13171319 else {
1318- let dE = makeString_2C([bV[w], makeString(dJ._1, "_"), makeString(dJ._2, "_"), makeString_2C(dJ._3, "_"), toString(eS)], ":")
1319- let dG = aD(invoke(aA, "saveWarehouse", [dE, V], nil))
1320- let eU = dJ._6
1321- let eV = if ((eU > 0))
1322- then if ((size(dI.payments) != 1))
1320+ let dF = makeString_2C([bW[w], makeString(dK._1, "_"), makeString(dK._2, "_"), makeString_2C(dK._3, "_"), toString(eT)], ":")
1321+ let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1322+ let eV = dK._6
1323+ let eW = if ((eV > 0))
1324+ then if ((size(dJ.payments) != 1))
13231325 then throw("exactly 1 payment must be attached")
13241326 else {
1325- let dh = dI.payments[0]
1326- let di = dh.amount
1327- let ex = valueOrErrorMessage(dh.assetId, "WAVES can't be used as payment")
1328- if ((ex != ac))
1327+ let di = dJ.payments[0]
1328+ let dj = di.amount
1329+ let ey = valueOrErrorMessage(di.assetId, "WAVES can't be used as payment")
1330+ if ((ey != ad))
13291331 then throw("USDT payments only!")
1330- else if ((di != eU))
1331- then throw(("Payment needed is " + toString(eU)))
1332- else [StringEntry(bc, eL)]
1332+ else if ((dj != eV))
1333+ then throw(("Payment needed is " + toString(eV)))
1334+ else [StringEntry(bd, eM)]
13331335 }
1334- else if ((eU == 0))
1335- then if ((size(dI.payments) != 0))
1336+ else if ((eV == 0))
1337+ then if ((size(dJ.payments) != 0))
13361338 then throw("No payments needed")
1337- else [StringEntry(bc, eL)]
1338- else if ((size(dI.payments) != 0))
1339+ else [StringEntry(bd, eM)]
1340+ else if ((size(dJ.payments) != 0))
13391341 then throw("No payments needed")
1340- else [ScriptTransfer(addressFromStringValue(ek), -(eU), ac), StringEntry(bc, eL)]
1341- $Tuple2(eV, $Tuple2(eK, dG))
1342+ else [ScriptTransfer(addressFromStringValue(el), -(eV), ad), StringEntry(bd, eM)]
1343+ $Tuple2(eW, $Tuple2(eL, dH))
13421344 }
13431345 }
13441346 }
13461348
13471349
13481350
1349-@Callable(dI)
1350-func acceptWarehouseOrder (dn,dm,S) = {
1351- let dL = bC()
1352- let db = dI.originCaller
1353- let cW = toString(db)
1354- let eW = valueOrErrorMessage(getString(aA, P(cW)), "You don't have a duck staked")
1355- let dM = valueOrElse(getString(aA, T(eW)), g)
1356- let eX = split(value(dM), "_")
1357- if ((eX[I] != "L"))
1358- then throw((("Duck location type is " + eX[I]) + ", but should be L"))
1359- else if ((eW != S))
1360- then throw(((("Your staked duck is " + eW) + ", but passed ") + S))
1351+@Callable(dJ)
1352+func acceptWarehouseOrder (do,dn,S) = {
1353+ let dM = bD()
1354+ let dc = dJ.originCaller
1355+ let cX = toString(dc)
1356+ let eX = valueOrErrorMessage(getString(aB, P(cX)), "You don't have a duck staked")
1357+ let dN = valueOrElse(getString(aB, T(eX)), g)
1358+ let eY = split(value(dN), "_")
1359+ if ((eY[I] != "L"))
1360+ then throw((("Duck location type is " + eY[I]) + ", but should be L"))
1361+ else if ((eX != S))
1362+ then throw(((("Your staked duck is " + eX) + ", but passed ") + S))
13611363 else {
1362- let bA = R(S)
1363- let dN = bz(bA)
1364- let do = split(dN[E], "_")
1365- let dp = split(dN[F], "_")
1366- let dq = if ((dN[G] == ""))
1364+ let bB = R(S)
1365+ let dO = bA(bB)
1366+ let dp = split(dO[E], "_")
1367+ let dq = split(dO[F], "_")
1368+ let dr = if ((dO[G] == ""))
13671369 then nil
1368- else split_4C(dN[G], "_")
1369- let eY = dl(dm, cW, dn, do, dp, dq)
1370- let eZ = eY._1
1371- let fa = eY._2
1372- let fb = eY._3
1373- let fc = eY._4
1374- let cV = eY._5
1375- let dd = eY._6
1376- let fd = eY._7
1377- let df = eY._8
1378- let fe = eY._9
1379- let dH = eY._10
1380- let ff = [eZ, cU(cV, cW, 0)]
1381- let fg = dc(dd, dI.payments, df, 0)
1382- let fh = makeString_2C([dN[D], makeString(fa, "_"), makeString(fb, "_"), makeString_2C(fc, "_")], ":")
1383- let fi = aD(invoke(aA, "updateBackpack", [S, fh], nil))
1384- let fj = aG(invoke(aA, "updateDuckStats", [S, fraction(d, fd, ai)], nil))
1385- $Tuple2((ff ++ fg), $Tuple5(dL, fe, fi, fj, dH))
1370+ else split_4C(dO[G], "_")
1371+ let eZ = dm(dn, cX, do, dp, dq, dr)
1372+ let fa = eZ._1
1373+ let fb = eZ._2
1374+ let fc = eZ._3
1375+ let fd = eZ._4
1376+ let cW = eZ._5
1377+ let de = eZ._6
1378+ let fe = eZ._7
1379+ let dg = eZ._8
1380+ let ff = eZ._9
1381+ let dI = eZ._10
1382+ let fg = [fa, cV(cW, cX, 0)]
1383+ let fh = dd(de, dJ.payments, dg, 0)
1384+ let fi = makeString_2C([dO[D], makeString(fb, "_"), makeString(fc, "_"), makeString_2C(fd, "_")], ":")
1385+ let fj = aE(invoke(aB, "updateBackpack", [S, fi], nil))
1386+ let fk = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fe, aj)], nil))
1387+ $Tuple2((fg ++ fh), $Tuple5(dM, ff, fj, fk, dI))
13861388 }
13871389 }
13881390
13891391
13901392
1391-@Callable(dI)
1392-func acceptShopOrderDuckDelivery (fk,dm) = if (!(aa))
1393+@Callable(dJ)
1394+func acceptShopOrderDuckDelivery (fl,dn) = if (!(ab))
13931395 then throw("Delivery feature is turned off!")
13941396 else {
1395- let dL = bC()
1396- let db = dI.originCaller
1397- let cW = toString(db)
1398- let S = valueOrErrorMessage(getString(aA, P(cW)), "You don't have a duck staked")
1399- let bA = R(S)
1400- let dN = bz(bA)
1401- let do = split(dN[E], "_")
1402- let dp = split(dN[F], "_")
1403- let dq = if ((dN[G] == ""))
1397+ let dM = bD()
1398+ let dc = dJ.originCaller
1399+ let cX = toString(dc)
1400+ let S = valueOrErrorMessage(getString(aB, P(cX)), "You don't have a duck staked")
1401+ let bB = R(S)
1402+ let dO = bA(bB)
1403+ let dp = split(dO[E], "_")
1404+ let dq = split(dO[F], "_")
1405+ let dr = if ((dO[G] == ""))
14041406 then nil
1405- else split_4C(dN[G], "_")
1406- let fl = dl(dm, cW, fk, do, dp, dq)
1407- let eZ = fl._1
1408- let fa = fl._2
1409- let fb = fl._3
1410- let fc = fl._4
1411- let cV = fl._5
1412- let dd = fl._6
1413- let fd = fl._7
1414- let df = fl._8
1415- let fe = fl._9
1416- let dH = fl._10
1417- let fm = fraction((dd + cV), aT, ah)
1418- let fn = if ((k > fm))
1407+ else split_4C(dO[G], "_")
1408+ let fm = dm(dn, cX, fl, dp, dq, dr)
1409+ let fa = fm._1
1410+ let fb = fm._2
1411+ let fc = fm._3
1412+ let fd = fm._4
1413+ let cW = fm._5
1414+ let de = fm._6
1415+ let fe = fm._7
1416+ let dg = fm._8
1417+ let ff = fm._9
1418+ let dI = fm._10
1419+ let fn = fraction((de + cW), aU, ai)
1420+ let fo = if ((k > fn))
14191421 then k
1420- else fm
1421- let dg = fraction(fn, dd, (dd + cV))
1422- let cX = (fn - dg)
1423- let eh = valueOrElse(getInteger(X), 0)
1424- let ff = [eZ, cU(cV, cW, cX)]
1425- let fg = dc(dd, dI.payments, df, dg)
1426- let fh = makeString_2C([dN[D], makeString(fa, "_"), makeString(fb, "_"), makeString_2C(fc, "_")], ":")
1427- let fi = aD(invoke(aA, "updateBackpack", [S, fh], nil))
1428- let fj = aG(invoke(aA, "updateDuckStats", [S, fraction(d, fd, ai)], nil))
1429- $Tuple2(((ff ++ fg) :+ IntegerEntry(X, (eh + fn))), $Tuple5(dL, fe, fi, fj, dH))
1422+ else fn
1423+ let dh = fraction(fo, de, (de + cW))
1424+ let cY = (fo - dh)
1425+ let ei = valueOrElse(getInteger(X), 0)
1426+ let fg = [fa, cV(cW, cX, cY)]
1427+ let fh = dd(de, dJ.payments, dg, dh)
1428+ let fi = makeString_2C([dO[D], makeString(fb, "_"), makeString(fc, "_"), makeString_2C(fd, "_")], ":")
1429+ let fj = aE(invoke(aB, "updateBackpack", [S, fi], nil))
1430+ let fk = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fe, aj)], nil))
1431+ $Tuple2(((fg ++ fh) :+ IntegerEntry(X, (ei + fo))), $Tuple5(dM, ff, fj, fk, dI))
14301432 }
14311433
14321434
14331435
1434-@Callable(dI)
1435-func acceptShopOrderLandDelivery (fk,dm,fo) = if (!(aa))
1436+@Callable(dJ)
1437+func acceptShopOrderLandDelivery (fl,dn,fp) = if (!(ab))
14361438 then throw("Delivery feature is turned off!")
14371439 else {
1438- let dL = bC()
1439- let db = dI.originCaller
1440- let cW = toString(db)
1441- let ej = value(assetInfo(fromBase58String(fo)))
1442- if (!(isDefined(getInteger(aA, M(fo)))))
1443- then throw((("NFT " + ej.name) + " is not staked"))
1440+ let dM = bD()
1441+ let dc = dJ.originCaller
1442+ let cX = toString(dc)
1443+ let ek = value(assetInfo(fromBase58String(fp)))
1444+ if (!(isDefined(getInteger(aB, M(fp)))))
1445+ then throw((("NFT " + ek.name) + " is not staked"))
14441446 else {
1445- let ek = valueOrErrorMessage(getString(aA, K(fo)), (("NFT " + ej.name) + " is orphaned"))
1446- if ((ek != cW))
1447+ let el = valueOrErrorMessage(getString(aB, K(fp)), (("NFT " + ek.name) + " is orphaned"))
1448+ if ((el != cX))
14471449 then throw((e + " is not yours"))
14481450 else {
1449- let dw = aD(invoke(aA, "getWarehouseREADONLY", [fo], nil))
1450- let bV = split_4C(dw, ":")
1451- let cH = split(bV[x], "_")
1452- let cO = split(bV[y], "_")
1453- let eA = if ((bV[z] == ""))
1451+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [fp], nil))
1452+ let bW = split_4C(dx, ":")
1453+ let cI = split(bW[x], "_")
1454+ let cP = split(bW[y], "_")
1455+ let eB = if ((bW[z] == ""))
14541456 then nil
1455- else split(bV[z], "_")
1456- let fp = dl(dm, cW, fk, cH, cO, eA)
1457- let eZ = fp._1
1458- let fa = fp._2
1459- let fb = fp._3
1460- let fc = fp._4
1461- let cV = fp._5
1462- let dd = fp._6
1463- let fd = fp._7
1464- let df = fp._8
1465- let fe = fp._9
1466- let dH = fp._10
1467- let fm = fraction((dd + cV), aT, ah)
1468- let fn = if ((k > fm))
1457+ else split(bW[z], "_")
1458+ let fq = dm(dn, cX, fl, cI, cP, eB)
1459+ let fa = fq._1
1460+ let fb = fq._2
1461+ let fc = fq._3
1462+ let fd = fq._4
1463+ let cW = fq._5
1464+ let de = fq._6
1465+ let fe = fq._7
1466+ let dg = fq._8
1467+ let ff = fq._9
1468+ let dI = fq._10
1469+ let fn = fraction((de + cW), aU, ai)
1470+ let fo = if ((k > fn))
14691471 then k
1470- else fm
1471- let dg = fraction(fn, dd, (dd + cV))
1472- let cX = (fn - dg)
1473- let eh = valueOrElse(getInteger(X), 0)
1474- let ff = [eZ, cU(cV, cW, cX)]
1475- let fg = dc(dd, dI.payments, df, dg)
1476- let dE = makeString_2C([bV[w], makeString(fa, "_"), makeString(fb, "_"), makeString(fc, "_"), bV[A]], ":")
1477- let dG = aD(invoke(aA, "saveWarehouse", [dE, fo], nil))
1478- let dV = aG(invoke(aA, "updateAccStats", [cW, fraction(d, fd, ai)], nil))
1479- $Tuple2(((ff ++ fg) :+ IntegerEntry(X, (eh + fn))), $Tuple5(dL, fe, dG, dV, dH))
1472+ else fn
1473+ let dh = fraction(fo, de, (de + cW))
1474+ let cY = (fo - dh)
1475+ let ei = valueOrElse(getInteger(X), 0)
1476+ let fg = [fa, cV(cW, cX, cY)]
1477+ let fh = dd(de, dJ.payments, dg, dh)
1478+ let dF = makeString_2C([bW[w], makeString(fb, "_"), makeString(fc, "_"), makeString(fd, "_"), bW[A]], ":")
1479+ let dH = aE(invoke(aB, "saveWarehouse", [dF, fp], nil))
1480+ let dW = aH(invoke(aB, "updateAccStats", [cX, fraction(d, fe, aj)], nil))
1481+ $Tuple2(((fg ++ fh) :+ IntegerEntry(X, (ei + fo))), $Tuple5(dM, ff, dH, dW, dI))
14801482 }
14811483 }
14821484 }
14831485
14841486
14851487
1486-@Callable(dI)
1487-func sellProductsToES (cJ) = {
1488- let dL = bC()
1489- if ((size(dI.payments) != 0))
1488+@Callable(dJ)
1489+func sellProductsToES (cK) = {
1490+ let dM = bD()
1491+ if ((size(dJ.payments) != 0))
14901492 then throw("No payments needed")
14911493 else {
1492- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
1493- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
1494- if ((dM[I] != "A"))
1495- then throw(("Duck location type should be Airport, but is " + dM[I]))
1494+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
1495+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
1496+ if ((dN[I] != "A"))
1497+ then throw(("Duck location type should be Airport, but is " + dN[I]))
14961498 else {
1497- let dN = bz(R(S))
1498- let eA = if ((dN[G] == ""))
1499+ let dO = bA(R(S))
1500+ let eB = if ((dO[G] == ""))
14991501 then nil
1500- else split_4C(dN[G], "_")
1501- let fq = W()
1502- let fr = getString(fq)
1503- let fs = if (isDefined(fr))
1504- then split_4C(value(fr), "_")
1502+ else split_4C(dO[G], "_")
1503+ let fr = W()
1504+ let fs = getString(fr)
1505+ let ft = if (isDefined(fs))
1506+ then split_4C(value(fs), "_")
15051507 else nil
1506- func ft (bE,fu) = {
1507- let bG = bE._1
1508- let ew = if ((size(cJ) > bG))
1509- then cJ[bG]
1508+ func fu (bF,fv) = {
1509+ let bH = bF._1
1510+ let ex = if ((size(cK) > bH))
1511+ then cK[bH]
15101512 else 0
1511- if ((0 > ew))
1513+ if ((0 > ex))
15121514 then throw("Quantity cannot be negative")
15131515 else {
1514- let Z = split(fu, "_")
1515- if ((size(Z) != u))
1516- then throw(("Fatal: unknown recipe: " + fu))
1516+ let aa = split(fv, "_")
1517+ if ((size(aa) != u))
1518+ then throw(("Fatal: unknown recipe: " + fv))
15171519 else {
1518- let fv = (i * v)
1519- let fw = if ((size(fs) > bG))
1520- then parseIntValue(fs[bG])
1520+ let fw = (i * v)
1521+ let fx = if ((size(ft) > bH))
1522+ then parseIntValue(ft[bH])
15211523 else 0
1522- let fx = (fv - fw)
1523- if ((ew > fx))
1524- then throw(((("Warehouse can buy only " + toString(fx)) + " of ") + o[bG]))
1524+ let fy = (fw - fx)
1525+ if ((ex > fy))
1526+ then throw(((("Warehouse can buy only " + toString(fy)) + " of ") + o[bH]))
15251527 else {
1526- let eo = Y(Z)
1527- let fy = fraction((eo * j), h, (ai * v))
1528- let fz = if ((size(eA) > bG))
1529- then parseIntValue(eA[bG])
1528+ let ep = Z(aa)
1529+ let fz = fraction((ep * j), h, (aj * v))
1530+ let fA = if ((size(eB) > bH))
1531+ then parseIntValue(eB[bH])
15301532 else 0
1531- if ((ew > fz))
1532- then throw(((("You have only " + toString(fz)) + " of ") + o[bG]))
1533- else $Tuple5((bG + 1), (bE._2 + (fy * ew)), (bE._3 :+ toString((fz - ew))), (bE._4 :+ toString((fw + ew))), (bE._5 + (eo * ew)))
1533+ if ((ex > fA))
1534+ then throw(((("You have only " + toString(fA)) + " of ") + o[bH]))
1535+ else $Tuple5((bH + 1), (bF._2 + (fz * ex)), (bF._3 :+ toString((fA - ex))), (bF._4 :+ toString((fx + ex))), (bF._5 + (ep * ex)))
15341536 }
15351537 }
15361538 }
15371539 }
15381540
1539- let eJ = {
1540- let ci = r
1541- let cj = size(ci)
1542- let ck = $Tuple5(0, 0, nil, nil, 0)
1543- func cl (cm,cn) = if ((cn >= cj))
1544- then cm
1545- else ft(cm, ci[cn])
1541+ let eK = {
1542+ let cj = r
1543+ let ck = size(cj)
1544+ let cl = $Tuple5(0, 0, nil, nil, 0)
1545+ func cm (cn,co) = if ((co >= ck))
1546+ then cn
1547+ else fu(cn, cj[co])
15461548
1547- func co (cm,cn) = if ((cn >= cj))
1548- then cm
1549+ func cp (cn,co) = if ((co >= ck))
1550+ then cn
15491551 else throw("List size exceeds 50")
15501552
1551- co(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(ck, 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)
1553+ cp(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cl, 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)
15521554 }
1553- let fh = makeString_2C([dN[D], dN[E], dN[F], makeString_2C(eJ._3, "_")], ":")
1554- let fi = aD(invoke(aA, "updateBackpack", [S, fh], nil))
1555- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(c, eJ._5, (ai * 10))], nil))
1556- $Tuple2([StringEntry(fq, makeString_2C(eJ._4, "_")), ScriptTransfer(dI.caller, eJ._2, ac)], $Tuple3(fi, dL, dV))
1555+ let fi = makeString_2C([dO[D], dO[E], dO[F], makeString_2C(eK._3, "_")], ":")
1556+ let fj = aE(invoke(aB, "updateBackpack", [S, fi], nil))
1557+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(c, eK._5, (aj * 10))], nil))
1558+ $Tuple2([StringEntry(fr, makeString_2C(eK._4, "_")), ScriptTransfer(dJ.caller, eK._2, ad)], $Tuple3(fj, dM, dW))
15571559 }
15581560 }
15591561 }
15601562
15611563
15621564
1563-@Callable(dI)
1564-func updateEsStorage (fA) = if ((dI.caller != aA))
1565+@Callable(dJ)
1566+func updateEsStorage (fB) = if ((dJ.caller != aB))
15651567 then throw("Permission denied")
1566- else $Tuple2([StringEntry(W(), fA)], fA)
1568+ else $Tuple2([StringEntry(W(), fB)], fB)
1569+
1570+
1571+
1572+@Callable(dJ)
1573+func updateDeliveryLocked (fC) = if ((dJ.caller != aB))
1574+ then throw("Permission denied")
1575+ else $Tuple2([IntegerEntry(Y, fC)], fC)
1576+
1577+
1578+
1579+@Callable(dJ)
1580+func sendDeliveryReward (O) = if ((dJ.caller != aB))
1581+ then throw("Permission denied")
1582+ else {
1583+ let ei = valueOrElse(getInteger(X), 0)
1584+ let fD = valueOrElse(getInteger(Y), 0)
1585+ $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (ei - k)), IntegerEntry(Y, (fD - k))], k)
1586+ }
15671587
15681588
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 10000
55
66 let b = 10000
77
88 let c = 10000
99
1010 let d = 10000
1111
1212 let e = "LAND"
1313
1414 let f = 6
1515
1616 let g = "Africa_F_Africa"
1717
1818 let h = 39637
1919
2020 let i = 10
2121
2222 let j = 4
2323
2424 let k = 50000
2525
2626 let l = 75000
2727
2828 let m = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
2929
3030 let n = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
3131
3232 let o = ["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", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
3333
3434 let p = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
3535
3636 let q = 10000000
3737
3838 let r = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
3939
4040 let s = 6
4141
4242 let t = 7
4343
4444 let u = 11
4545
4646 let v = 10
4747
4848 let w = 0
4949
5050 let x = 1
5151
5252 let y = 2
5353
5454 let z = 3
5555
5656 let A = 4
5757
5858 let B = 0
5959
6060 let C = 3
6161
6262 let D = 0
6363
6464 let E = 1
6565
6666 let F = 2
6767
6868 let G = 3
6969
7070 let H = 0
7171
7272 let I = 1
7373
7474 let J = 2
7575
7676 func K (L) = ("no_" + L)
7777
7878
7979 func M (L) = ("st_" + L)
8080
8181
8282 func N (O) = ("accRefBy_" + O)
8383
8484
8585 func P (Q) = ("stakedDuckByOwner_" + Q)
8686
8787
8888 func R (S) = ("backPack_" + S)
8989
9090
9191 func T (S) = ("duckLocation_" + S)
9292
9393
9494 func U (V) = ("landOrder_" + V)
9595
9696
9797 func W () = "emergencyWarehouseProducts"
9898
9999
100100 let X = "deliveryFund"
101101
102-func Y (Z) = (parseIntValue(Z[s]) * q)
102+let Y = "deliveryLocked"
103+
104+func Z (aa) = (parseIntValue(aa[s]) * q)
103105
104106
105-let aa = true
107+let ab = true
106108
107-let ab = take(drop(this.bytes, 1), 1)
109+let ac = take(drop(this.bytes, 1), 1)
108110
109-let ac = {
110- let ad = ab
111- if ((base58'2W' == ad))
111+let ad = {
112+ let ae = ac
113+ if ((base58'2W' == ae))
112114 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
113- else if ((base58'2T' == ad))
115+ else if ((base58'2T' == ae))
114116 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
115117 else throw("Unknown chain")
116118 }
117119
118-let ae = {
119- let ad = ab
120- if ((base58'2W' == ad))
120+let af = {
121+ let ae = ac
122+ if ((base58'2W' == ae))
121123 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
122- else if ((base58'2T' == ad))
124+ else if ((base58'2T' == ae))
123125 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
124126 else throw("Unknown chain")
125127 }
126128
127-let af = "__"
129+let ag = "__"
128130
129-let ag = 100000
131+let ah = 100000
130132
131-let ah = 1000000
133+let ai = 1000000
132134
133-let ai = 100000000
135+let aj = 100000000
134136
135-let aj = 10000000000
137+let ak = 10000000000
136138
137-let ak = 100000
139+let al = 100000
138140
139-let al = [0, 1, 2, 3, 4, 5]
141+let am = [0, 1, 2, 3, 4, 5]
140142
141-func am (an,ao) = valueOrErrorMessage(getString(an, ao), makeString(["mandatory ", toString(an), ".", ao, " is not defined"], ""))
143+func an (ao,ap) = valueOrErrorMessage(getString(ao, ap), makeString(["mandatory ", toString(ao), ".", ap, " is not defined"], ""))
142144
143145
144-let ap = 1
146+let aq = 1
145147
146-let aq = 6
148+let ar = 6
147149
148-let ar = 8
150+let as = 8
149151
150-func as () = "%s__restConfig"
152+func at () = "%s__restConfig"
151153
152154
153-func at () = "%s__restAddr"
155+func au () = "%s__restAddr"
154156
155157
156-func au (av) = split_4C(am(av, as()), af)
158+func av (aw) = split_4C(an(aw, at()), ag)
157159
158160
159-func aw (ax,ay) = valueOrErrorMessage(addressFromString(ax[ay]), ("Rest cfg doesn't contain address at index " + toString(ay)))
161+func ax (ay,az) = valueOrErrorMessage(addressFromString(ay[az]), ("Rest cfg doesn't contain address at index " + toString(az)))
160162
161163
162-let az = addressFromStringValue(valueOrElse(getString(this, at()), ae))
164+let aA = addressFromStringValue(valueOrElse(getString(this, au()), af))
163165
164-let ax = au(az)
166+let ay = av(aA)
165167
166-let aA = aw(ax, ap)
168+let aB = ax(ay, aq)
167169
168-let aB = aw(ax, aq)
170+let aC = ax(ay, ar)
169171
170-let aC = aw(ax, ar)
172+let aD = ax(ay, as)
171173
172-func aD (aE) = {
173- let ad = aE
174- if ($isInstanceOf(ad, "String"))
174+func aE (aF) = {
175+ let ae = aF
176+ if ($isInstanceOf(ae, "String"))
175177 then {
176- let aF = ad
177- aF
178+ let aG = ae
179+ aG
178180 }
179181 else throw("fail to cast into String")
180182 }
181183
182184
183-func aG (aE) = {
184- let ad = aE
185- if ($isInstanceOf(ad, "Int"))
185+func aH (aF) = {
186+ let ae = aF
187+ if ($isInstanceOf(ae, "Int"))
186188 then {
187- let aH = ad
188- aH
189+ let aI = ae
190+ aI
189191 }
190192 else throw("fail to cast into Int")
191193 }
192194
193195
194-func aI () = "contractsBlocked"
196+func aJ () = "contractsBlocked"
195197
196198
197-func aJ (aK,aL) = {
198- let aM = pow(10, 0, aL, 0, 0, DOWN)
199- let aN = toString((aK % aM))
200- let aO = drop(toString(aM), (1 + size(aN)))
201- (((toString((aK / aM)) + ".") + aO) + aN)
199+func aK (aL,aM) = {
200+ let aN = pow(10, 0, aM, 0, 0, DOWN)
201+ let aO = toString((aL % aN))
202+ let aP = drop(toString(aN), (1 + size(aO)))
203+ (((toString((aL / aN)) + ".") + aP) + aO)
202204 }
203205
204206
205-let aP = 10000000000
207+let aQ = 10000000000
206208
207-let aQ = 200
209+let aR = 200
208210
209-let aR = 300
210-
211-let aS = 10000
211+let aS = 300
212212
213213 let aT = 10000
214214
215-let aU = 15000
215+let aU = 10000
216216
217-func aV (aW,aX) = ((("factoryWhByContinentAndRes_" + aW) + "_") + toString(aX))
217+let aV = 15000
218+
219+func aW (aX,aY) = ((("factoryWhByContinentAndRes_" + aX) + "_") + toString(aY))
218220
219221
220-let aY = 0
222+let aZ = 0
221223
222-let aZ = 1
224+let ba = 1
223225
224-let ba = 2
226+let bb = 2
225227
226-func bb (bc) = {
227- let bd = split(valueOrElse(getString(bc), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
228-[if ((size(split(bd[aY], "_")) == f))
229- then bd[aY]
230- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bd[aZ], "_")) == f))
231- then bd[aZ]
232- else "0@0_0@0_0@0_0@0_0@0_0@0", bd[ba]]
228+func bc (bd) = {
229+ let be = split(valueOrElse(getString(bd), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
230+[if ((size(split(be[aZ], "_")) == f))
231+ then be[aZ]
232+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(be[ba], "_")) == f))
233+ then be[ba]
234+ else "0@0_0@0_0@0_0@0_0@0_0@0", be[bb]]
233235 }
234236
235237
236-func be (bf,bg,bh) = if (bh)
238+func bf (bg,bh,bi) = if (bi)
237239 then {
238- let bi = if ((bf >= 0))
239- then (((bf + bg) - 1) / bg)
240- else -((((-(bf) + bg) - 1) / bg))
241- (bi * ai)
240+ let bj = if ((bg >= 0))
241+ then (((bg + bh) - 1) / bh)
242+ else -((((-(bg) + bh) - 1) / bh))
243+ (bj * aj)
242244 }
243- else bf
245+ else bg
244246
245247
246-func bj (bk,aX,bf,bl) = {
247- let bm = aV(bk, aX)
248- let bn = valueOrElse(getInteger(bm), 0)
249- let bo = if ((bn > aP))
248+func bk (bl,aY,bg,bm) = {
249+ let bn = aW(bl, aY)
250+ let bo = valueOrElse(getInteger(bn), 0)
251+ let bp = if ((bo > aQ))
250252 then 0
251- else if (((bn + bf) > aP))
252- then (aP - bn)
253- else bf
254- let bp = (fraction(bo, ((aQ * h) - fraction(((100 * bn) + (50 * bo)), h, aP)), aj) + fraction((bf - bo), h, ai))
255- let bq = (bl - (bl / 100))
256- if (((bq * bf) > (bp * ai)))
257- then throw((((((((((("Actual price = " + toString(bp)) + " / ") + toString(bf)) + " < minPrice = ") + toString(bl)) + ", (") + bk) + ", ") + m[aX]) + ")"))
258- else $Tuple2(IntegerEntry(bm, (bn + bf)), bp)
253+ else if (((bo + bg) > aQ))
254+ then (aQ - bo)
255+ else bg
256+ let bq = (fraction(bp, ((aR * h) - fraction(((100 * bo) + (50 * bp)), h, aQ)), ak) + fraction((bg - bp), h, aj))
257+ let br = (bm - (bm / 100))
258+ if (((br * bg) > (bq * aj)))
259+ then throw((((((((((("Actual price = " + toString(bq)) + " / ") + toString(bg)) + " < minPrice = ") + toString(bm)) + ", (") + bl) + ", ") + m[aY]) + ")"))
260+ else $Tuple2(IntegerEntry(bn, (bo + bg)), bq)
259261 }
260262
261263
262-func br (bk,bs,bf,bt) = {
263- let bm = aV(bk, bs)
264- let bn = valueOrElse(getInteger(bm), 0)
265- let bu = if ((bn > aP))
266- then min([bf, (bn - aP)])
264+func bs (bl,bt,bg,bu) = {
265+ let bn = aW(bl, bt)
266+ let bo = valueOrElse(getInteger(bn), 0)
267+ let bv = if ((bo > aQ))
268+ then min([bg, (bo - aQ)])
267269 else 0
268- let bv = min([bn, (bf - bu)])
269- let bw = (bv + bu)
270- let bx = (fraction(bv, ((aR * h) - fraction(((100 * bn) - (50 * bv)), h, aP)), aj) + fraction(bu, (2 * h), ai))
271- let by = (bt + (bt / 100))
272- if (((bx * ai) > (by * bw)))
273- then throw((((((((((("Actual price = " + toString(bx)) + " / ") + toString(bw)) + " > maxPrice = ") + toString(bt)) + ", (") + bk) + ", ") + n[bs]) + ")"))
274- else $Tuple3(IntegerEntry(bm, (bn - bw)), bx, bw)
270+ let bw = min([bo, (bg - bv)])
271+ let bx = (bw + bv)
272+ let by = (fraction(bw, ((aS * h) - fraction(((100 * bo) - (50 * bw)), h, aQ)), ak) + fraction(bv, (2 * h), aj))
273+ let bz = (bu + (bu / 100))
274+ if (((by * aj) > (bz * bx)))
275+ then throw((((((((((("Actual price = " + toString(by)) + " / ") + toString(bx)) + " > maxPrice = ") + toString(bu)) + ", (") + bl) + ", ") + n[bt]) + ")"))
276+ else $Tuple3(IntegerEntry(bn, (bo - bx)), by, bx)
275277 }
276278
277279
278-func bz (bA) = {
279- let bd = split_4C(valueOrElse(getString(aA, bA), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
280-[toString(valueOrElse(parseInt(bd[D]), 0)), if ((size(split(bd[E], "_")) == f))
281- then bd[E]
282- else "0_0_0_0_0_0", if ((size(split(bd[F], "_")) == f))
283- then bd[F]
284- else "0_0_0_0_0_0", bd[G]]
280+func bA (bB) = {
281+ let be = split_4C(valueOrElse(getString(aB, bB), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
282+[toString(valueOrElse(parseInt(be[D]), 0)), if ((size(split(be[E], "_")) == f))
283+ then be[E]
284+ else "0_0_0_0_0_0", if ((size(split(be[F], "_")) == f))
285+ then be[F]
286+ else "0_0_0_0_0_0", be[G]]
285287 }
286288
287289
288-func bB () = if (valueOrElse(getBoolean(aA, aI()), false))
290+func bC () = if (valueOrElse(getBoolean(aB, aJ()), false))
289291 then throw("Contracts are under maintenance")
290292 else unit
291293
292294
293-func bC () = aG(invoke(aA, "saveLastTx", nil, nil))
295+func bD () = aH(invoke(aB, "saveLastTx", nil, nil))
294296
295297
296-func bD (bE,bF) = {
297- let bG = bE._1
298- let bH = if ((size(bE._10) > bG))
299- then bE._10[bG]
298+func bE (bF,bG) = {
299+ let bH = bF._1
300+ let bI = if ((size(bF._10) > bH))
301+ then bF._10[bH]
300302 else "0@0"
301- let bI = bE._8
302- let bJ = split(bH, "@")
303- if ((size(bJ) != 2))
303+ let bJ = bF._8
304+ let bK = split(bI, "@")
305+ if ((size(bK) != 2))
304306 then throw("Incorrect order format, should be amount@price")
305307 else {
306- let bK = parseIntValue(bJ[0])
307- let bL = parseIntValue(bJ[1])
308- let bM = if (bI)
309- then (bK * bL)
310- else fraction(bK, bL, ai)
311- let bN = be(bK, v, bI)
312- let bO = if ((size(bE._6) > bG))
313- then parseIntValue(bE._6[bG])
308+ let bL = parseIntValue(bK[0])
309+ let bM = parseIntValue(bK[1])
310+ let bN = if (bJ)
311+ then (bL * bM)
312+ else fraction(bL, bM, aj)
313+ let bO = bf(bL, v, bJ)
314+ let bP = if ((size(bF._6) > bH))
315+ then parseIntValue(bF._6[bH])
314316 else 0
315- let bP = split(if ((size(bE._7) > bG))
316- then bE._7[bG]
317+ let bQ = split(if ((size(bF._7) > bH))
318+ then bF._7[bH]
317319 else "0@0", "@")
318- let bQ = parseIntValue(bP[0])
319- let bR = parseIntValue(bP[1])
320- if (if ((0 > bR))
320+ let bR = parseIntValue(bQ[0])
321+ let bS = parseIntValue(bQ[1])
322+ if (if ((0 > bS))
321323 then true
322- else (0 > bL))
324+ else (0 > bM))
323325 then throw("Price can't be negative")
324326 else {
325- let bS = if (bI)
326- then (bQ * bR)
327- else fraction(bQ, bR, ai)
328- if ((bK == 0))
329- then if ((bQ > 0))
330- then $Tuple10((bG + 1), (bE._2 :+ toString(bO)), bE._3, bE._4, (bE._5 - bS), bE._6, bE._7, bI, (bE._9 + be(bO, v, bI)), bE._10)
331- else $Tuple10((bG + 1), (bE._2 :+ toString((bO - bQ))), bE._3, bE._4, bE._5, bE._6, bE._7, bI, (bE._9 + be((bO - bQ), v, bI)), bE._10)
332- else if ((bK > 0))
333- then if ((0 > bQ))
334- then $Tuple10((bG + 1), (bE._2 :+ toString((bO - bQ))), (bE._3 + bN), bE._4, (bE._5 + bM), bE._6, bE._7, bI, be((bO - bQ), v, bI), bE._10)
335- else $Tuple10((bG + 1), (bE._2 :+ toString(bO)), (bE._3 + bN), bE._4, ((bE._5 + bM) - bS), bE._6, bE._7, bI, be(bO, v, bI), bE._10)
336- else if ((0 > bQ))
327+ let bT = if (bJ)
328+ then (bR * bS)
329+ else fraction(bR, bS, aj)
330+ if ((bL == 0))
331+ then if ((bR > 0))
332+ then $Tuple10((bH + 1), (bF._2 :+ toString(bP)), bF._3, bF._4, (bF._5 - bT), bF._6, bF._7, bJ, (bF._9 + bf(bP, v, bJ)), bF._10)
333+ else $Tuple10((bH + 1), (bF._2 :+ toString((bP - bR))), bF._3, bF._4, bF._5, bF._6, bF._7, bJ, (bF._9 + bf((bP - bR), v, bJ)), bF._10)
334+ else if ((bL > 0))
335+ then if ((0 > bR))
336+ then $Tuple10((bH + 1), (bF._2 :+ toString((bP - bR))), (bF._3 + bO), bF._4, (bF._5 + bN), bF._6, bF._7, bJ, bf((bP - bR), v, bJ), bF._10)
337+ else $Tuple10((bH + 1), (bF._2 :+ toString(bP)), (bF._3 + bO), bF._4, ((bF._5 + bN) - bT), bF._6, bF._7, bJ, bf(bP, v, bJ), bF._10)
338+ else if ((0 > bR))
337339 then {
338- let bT = (bQ - bK)
339- if ((0 > (bO - bT)))
340- then throw((((("Attempt to take " + toString(bT)) + " from warehouse, but only ") + toString(bO)) + " available"))
341- else $Tuple10((bG + 1), (bE._2 :+ toString((bO - bT))), bE._3, (bE._4 - bN), bE._5, bE._6, bE._7, bI, be((bO - bT), v, bI), bE._10)
340+ let bU = (bR - bL)
341+ if ((0 > (bP - bU)))
342+ then throw((((("Attempt to take " + toString(bU)) + " from warehouse, but only ") + toString(bP)) + " available"))
343+ else $Tuple10((bH + 1), (bF._2 :+ toString((bP - bU))), bF._3, (bF._4 - bO), bF._5, bF._6, bF._7, bJ, bf((bP - bU), v, bJ), bF._10)
342344 }
343- else if ((0 > (bO + bK)))
344- then throw((((("Attempt to take " + toString(-(bK))) + " from warehouse, but only ") + toString(bO)) + " available"))
345- else $Tuple10((bG + 1), (bE._2 :+ toString((bO + bK))), bE._3, (bE._4 - bN), (bE._5 - bS), bE._6, bE._7, bI, be((bO + bK), v, bI), bE._10)
345+ else if ((0 > (bP + bL)))
346+ then throw((((("Attempt to take " + toString(-(bL))) + " from warehouse, but only ") + toString(bP)) + " available"))
347+ else $Tuple10((bH + 1), (bF._2 :+ toString((bP + bL))), bF._3, (bF._4 - bO), (bF._5 - bT), bF._6, bF._7, bJ, bf((bP + bL), v, bJ), bF._10)
346348 }
347349 }
348350 }
349351
350352
351-func bU (bV,bW,bX) = {
352- let bY = split(bV[x], "_")
353- let bZ = split(bV[y], "_")
354- let ca = if ((bV[z] == ""))
353+func bV (bW,bX,bY) = {
354+ let bZ = split(bW[x], "_")
355+ let ca = split(bW[y], "_")
356+ let cb = if ((bW[z] == ""))
355357 then nil
356- else split_4C(bV[z], "_")
357- let cb = split(bW[aY], "_")
358- let cc = split(bW[aZ], "_")
359- let cd = if ((bW[ba] == ""))
358+ else split_4C(bW[z], "_")
359+ let cc = split(bX[aZ], "_")
360+ let cd = split(bX[ba], "_")
361+ let ce = if ((bX[bb] == ""))
360362 then nil
361- else split_4C(bW[ba], "_")
362- if ((size(bX) != 3))
363+ else split_4C(bX[bb], "_")
364+ if ((size(bY) != 3))
363365 then throw("newOrderStr should contain exactly 2 ':' separators")
364366 else {
365- let ce = split(bX[0], "_")
366- let cf = split(bX[1], "_")
367- let cg = if ((bX[2] == ""))
367+ let cf = split(bY[0], "_")
368+ let cg = split(bY[1], "_")
369+ let ch = if ((bY[2] == ""))
368370 then nil
369- else split_4C(bX[2], "_")
370- if ((size(ce) != f))
371+ else split_4C(bY[2], "_")
372+ if ((size(cf) != f))
371373 then throw("All 6 resources should be passed")
372- else if ((size(cf) != f))
374+ else if ((size(cg) != f))
373375 then throw("All 6 materials should be passed")
374376 else {
375- let ch = {
376- let ci = m
377- let cj = size(ci)
378- let ck = $Tuple10(0, nil, 0, 0, 0, bY, cb, false, 0, ce)
379- func cl (cm,cn) = if ((cn >= cj))
380- then cm
381- else bD(cm, ci[cn])
377+ let ci = {
378+ let cj = m
379+ let ck = size(cj)
380+ let cl = $Tuple10(0, nil, 0, 0, 0, bZ, cc, false, 0, cf)
381+ func cm (cn,co) = if ((co >= ck))
382+ then cn
383+ else bE(cn, cj[co])
382384
383- func co (cm,cn) = if ((cn >= cj))
384- then cm
385+ func cp (cn,co) = if ((co >= ck))
386+ then cn
385387 else throw("List size exceeds 6")
386388
387- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
389+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
388390 }
389- let bw = {
390- let ci = n
391- let cj = size(ci)
392- let ck = $Tuple10(0, nil, ch._3, ch._4, ch._5, bZ, cc, false, ch._9, cf)
393- func cp (cm,cn) = if ((cn >= cj))
394- then cm
395- else bD(cm, ci[cn])
391+ let bx = {
392+ let cj = n
393+ let ck = size(cj)
394+ let cl = $Tuple10(0, nil, ci._3, ci._4, ci._5, ca, cd, false, ci._9, cg)
395+ func cq (cn,co) = if ((co >= ck))
396+ then cn
397+ else bE(cn, cj[co])
396398
397- func cq (cm,cn) = if ((cn >= cj))
398- then cm
399+ func cr (cn,co) = if ((co >= ck))
400+ then cn
399401 else throw("List size exceeds 6")
400402
401- cq(cp(cp(cp(cp(cp(cp(ck, 0), 1), 2), 3), 4), 5), 6)
403+ cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
402404 }
403- let bd = {
404- let ci = o
405- let cj = size(ci)
406- let ck = $Tuple10(0, nil, bw._3, bw._4, bw._5, ca, cd, true, bw._9, cg)
407- func cr (cm,cn) = if ((cn >= cj))
408- then cm
409- else bD(cm, ci[cn])
405+ let be = {
406+ let cj = o
407+ let ck = size(cj)
408+ let cl = $Tuple10(0, nil, bx._3, bx._4, bx._5, cb, ce, true, bx._9, ch)
409+ func cs (cn,co) = if ((co >= ck))
410+ then cn
411+ else bE(cn, cj[co])
410412
411- func cs (cm,cn) = if ((cn >= cj))
412- then cm
413+ func ct (cn,co) = if ((co >= ck))
414+ then cn
413415 else throw("List size exceeds 50")
414416
415- cs(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(ck, 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)
417+ ct(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cl, 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)
416418 }
417- $Tuple7(ch._2, bw._2, bd._2, bd._3, bd._4, bd._5, bd._9)
419+ $Tuple7(ci._2, bx._2, be._2, be._3, be._4, be._5, be._9)
418420 }
419421 }
420422 }
421423
422424
423-func ct (bE,cu) = {
424- let bG = bE._7
425- let bI = bE._12
426- let cv = split(cu, "@")
427- if ((size(cv) != 2))
425+func cu (bF,cv) = {
426+ let bH = bF._7
427+ let bJ = bF._12
428+ let cw = split(cv, "@")
429+ if ((size(cw) != 2))
428430 then throw("Incorrect order format, should be amount@price")
429431 else {
430- let cw = parseIntValue(cv[0])
431- let cx = parseIntValue(cv[1])
432- if ((0 > cx))
432+ let cx = parseIntValue(cw[0])
433+ let cy = parseIntValue(cw[1])
434+ if ((0 > cy))
433435 then throw("Price can't be negative")
434436 else {
435- let cy = if (bI)
436- then (cw * cx)
437- else fraction(cw, cx, ai)
438- let cz = if ((size(bE._8) > bG))
439- then parseIntValue(bE._8[bG])
437+ let cz = if (bJ)
438+ then (cx * cy)
439+ else fraction(cx, cy, aj)
440+ let cA = if ((size(bF._8) > bH))
441+ then parseIntValue(bF._8[bH])
440442 else 0
441- let bO = if ((size(bE._9) > bG))
442- then parseIntValue(bE._9[bG])
443+ let bP = if ((size(bF._9) > bH))
444+ then parseIntValue(bF._9[bH])
443445 else 0
444- let cA = if ((size(bE._10) > bG))
445- then bE._10[bG]
446+ let cB = if ((size(bF._10) > bH))
447+ then bF._10[bH]
446448 else "0@0"
447- let cB = split(cA, "@")
448- let cC = parseIntValue(cB[0])
449- let cD = parseIntValue(cB[1])
450- if (if ((cw != 0))
451- then (cx != cD)
449+ let cC = split(cB, "@")
450+ let cD = parseIntValue(cC[0])
451+ let cE = parseIntValue(cC[1])
452+ if (if ((cx != 0))
453+ then (cy != cE)
452454 else false)
453- then throw(((((("Prices of " + bE._11[bG]) + " don't match! WH price=") + toString(cD)) + ", your price=") + toString(cx)))
455+ then throw(((((("Prices of " + bF._11[bH]) + " don't match! WH price=") + toString(cE)) + ", your price=") + toString(cy)))
454456 else {
455- let cE = if (bI)
456- then (cC * cD)
457- else fraction(cC, cD, ai)
458- let cF = be(cw, v, bI)
459- if ((cw == 0))
460- then $Tuple13((bE._1 :+ toString(bO)), (bE._2 :+ cA), (bE._3 :+ toString(cz)), bE._4, bE._5, bE._6, (bE._7 + 1), bE._8, bE._9, bE._10, bE._11, bI, bE._13)
461- else if ((cw > 0))
462- then if ((0 > cC))
463- then if ((cw > -(cC)))
464- then throw(((((("Attempt to buy " + toString(cw)) + " of ") + bE._11[bG]) + ", but warehouse only sells ") + toString(-(cC))))
465- else $Tuple13((bE._1 :+ toString(bO)), (bE._2 :+ ((toString((cC + cw)) + "@") + toString(cD))), (bE._3 :+ toString((cz + cw))), (bE._4 + cF), bE._5, (bE._6 + cy), (bE._7 + 1), bE._8, bE._9, bE._10, bE._11, bI, (bE._13 + (if (bI)
466- then (cw * ai)
467- else cw)))
468- else throw((("Attempt to buy " + bE._11[bG]) + " while warehouse doesn't sell it"))
469- else if ((cC > 0))
470- then if ((-(cw) > cC))
471- then throw(((((("Attempt to sell " + toString(-(cw))) + " of ") + bE._11[bG]) + ", but warehouse only buys ") + toString(cC)))
472- else if ((-(cw) > cz))
473- then throw(((((("Attempt to sell " + toString(-(cw))) + ", but you only have ") + toString(cz)) + " of ") + bE._11[bG]))
474- else $Tuple13((bE._1 :+ toString((bO - cw))), (bE._2 :+ ((toString((cC + cw)) + "@") + toString(cD))), (bE._3 :+ toString((cz + cw))), (bE._4 - cF), (bE._5 - cy), bE._6, (bE._7 + 1), bE._8, bE._9, bE._10, bE._11, bI, (bE._13 - (if (bI)
475- then (cw * ai)
476- else cw)))
477- else throw((("Attempt to sell " + bE._11[bG]) + " while warehouse doesn't buy it"))
457+ let cF = if (bJ)
458+ then (cD * cE)
459+ else fraction(cD, cE, aj)
460+ let cG = bf(cx, v, bJ)
461+ if ((cx == 0))
462+ then $Tuple13((bF._1 :+ toString(bP)), (bF._2 :+ cB), (bF._3 :+ toString(cA)), bF._4, bF._5, bF._6, (bF._7 + 1), bF._8, bF._9, bF._10, bF._11, bJ, bF._13)
463+ else if ((cx > 0))
464+ then if ((0 > cD))
465+ then if ((cx > -(cD)))
466+ then throw(((((("Attempt to buy " + toString(cx)) + " of ") + bF._11[bH]) + ", but warehouse only sells ") + toString(-(cD))))
467+ else $Tuple13((bF._1 :+ toString(bP)), (bF._2 :+ ((toString((cD + cx)) + "@") + toString(cE))), (bF._3 :+ toString((cA + cx))), (bF._4 + cG), bF._5, (bF._6 + cz), (bF._7 + 1), bF._8, bF._9, bF._10, bF._11, bJ, (bF._13 + (if (bJ)
468+ then (cx * aj)
469+ else cx)))
470+ else throw((("Attempt to buy " + bF._11[bH]) + " while warehouse doesn't sell it"))
471+ else if ((cD > 0))
472+ then if ((-(cx) > cD))
473+ then throw(((((("Attempt to sell " + toString(-(cx))) + " of ") + bF._11[bH]) + ", but warehouse only buys ") + toString(cD)))
474+ else if ((-(cx) > cA))
475+ then throw(((((("Attempt to sell " + toString(-(cx))) + ", but you only have ") + toString(cA)) + " of ") + bF._11[bH]))
476+ else $Tuple13((bF._1 :+ toString((bP - cx))), (bF._2 :+ ((toString((cD + cx)) + "@") + toString(cE))), (bF._3 :+ toString((cA + cx))), (bF._4 - cG), (bF._5 - cz), bF._6, (bF._7 + 1), bF._8, bF._9, bF._10, bF._11, bJ, (bF._13 - (if (bJ)
477+ then (cx * aj)
478+ else cx)))
479+ else throw((("Attempt to sell " + bF._11[bH]) + " while warehouse doesn't buy it"))
478480 }
479481 }
480482 }
481483 }
482484
483485
484-func cG (cH,cI,cJ,cK) = {
485- func cL (bE,bG) = if ((cJ[bG] > parseIntValue(cH[bG])))
486- then throw(((((("You have " + cH[bG]) + " of ") + m[bG]) + ", but tried to sell ") + toString(cJ[bG])))
487- else if ((0 > cJ[bG]))
488- then throw(((("You tried to sell negative amount of " + m[bG]) + ": ") + toString(cJ[bG])))
489- else if ((cJ[bG] > 0))
486+func cH (cI,cJ,cK,cL) = {
487+ func cM (bF,bH) = if ((cK[bH] > parseIntValue(cI[bH])))
488+ then throw(((((("You have " + cI[bH]) + " of ") + m[bH]) + ", but tried to sell ") + toString(cK[bH])))
489+ else if ((0 > cK[bH]))
490+ then throw(((("You tried to sell negative amount of " + m[bH]) + ": ") + toString(cK[bH])))
491+ else if ((cK[bH] > 0))
490492 then {
491- let cM = bj(cI, bG, cJ[bG], cK[bG])
492- $Tuple4((bE._1 :+ cM._1), (bE._2 :+ toString((parseIntValue(cH[bG]) - cJ[bG]))), (bE._3 + cM._2), (bE._4 + cJ[bG]))
493+ let cN = bk(cJ, bH, cK[bH], cL[bH])
494+ $Tuple4((bF._1 :+ cN._1), (bF._2 :+ toString((parseIntValue(cI[bH]) - cK[bH]))), (bF._3 + cN._2), (bF._4 + cK[bH]))
493495 }
494- else $Tuple4(bE._1, (bE._2 :+ cH[bG]), bE._3, bE._4)
496+ else $Tuple4(bF._1, (bF._2 :+ cI[bH]), bF._3, bF._4)
495497
496- let ci = al
497- let cj = size(ci)
498- let ck = $Tuple4(nil, nil, 0, 0)
499- func cl (cm,cn) = if ((cn >= cj))
500- then cm
501- else cL(cm, ci[cn])
498+ let cj = am
499+ let ck = size(cj)
500+ let cl = $Tuple4(nil, nil, 0, 0)
501+ func cm (cn,co) = if ((co >= ck))
502+ then cn
503+ else cM(cn, cj[co])
502504
503- func co (cm,cn) = if ((cn >= cj))
504- then cm
505+ func cp (cn,co) = if ((co >= ck))
506+ then cn
505507 else throw("List size exceeds 6")
506508
507- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
509+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
508510 }
509511
510512
511-func cN (cO,cI,cJ,cP) = {
512- func cQ (bE,bG) = if ((0 > cJ[bG]))
513- then throw(((("You tried to buy negative amount of " + n[bG]) + ": ") + toString(cJ[bG])))
514- else if ((cJ[bG] > 0))
513+func cO (cP,cJ,cK,cQ) = {
514+ func cR (bF,bH) = if ((0 > cK[bH]))
515+ then throw(((("You tried to buy negative amount of " + n[bH]) + ": ") + toString(cK[bH])))
516+ else if ((cK[bH] > 0))
515517 then {
516- let cM = br(cI, bG, cJ[bG], cP[bG])
517- $Tuple4((bE._1 :+ cM._1), (bE._2 :+ toString((parseIntValue(cO[bG]) + cM._3))), (bE._3 + cM._2), (bE._4 + cJ[bG]))
518+ let cN = bs(cJ, bH, cK[bH], cQ[bH])
519+ $Tuple4((bF._1 :+ cN._1), (bF._2 :+ toString((parseIntValue(cP[bH]) + cN._3))), (bF._3 + cN._2), (bF._4 + cK[bH]))
518520 }
519- else $Tuple4(bE._1, (bE._2 :+ cO[bG]), bE._3, bE._4)
521+ else $Tuple4(bF._1, (bF._2 :+ cP[bH]), bF._3, bF._4)
520522
521- let ci = al
522- let cj = size(ci)
523- let ck = $Tuple4(nil, nil, 0, 0)
524- func cl (cm,cn) = if ((cn >= cj))
525- then cm
526- else cQ(cm, ci[cn])
523+ let cj = am
524+ let ck = size(cj)
525+ let cl = $Tuple4(nil, nil, 0, 0)
526+ func cm (cn,co) = if ((co >= ck))
527+ then cn
528+ else cR(cn, cj[co])
527529
528- func co (cm,cn) = if ((cn >= cj))
529- then cm
530+ func cp (cn,co) = if ((co >= ck))
531+ then cn
530532 else throw("List size exceeds 6")
531533
532- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
534+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
533535 }
534536
535537
536-func cR (cH,cO,cJ) = {
537- func cS (bE,bG) = {
538- let cT = cJ[bG]
539- if ((cT > parseIntValue(cH[bG])))
540- then throw(((((("You have " + cH[bG]) + " of ") + m[bG]) + ", but tried to exchange ") + toString(cT)))
541- else if ((0 > cT))
542- then throw(((("You tried to exchange negative amount of " + m[bG]) + ": ") + toString(cT)))
543- else if ((cT > 0))
544- then $Tuple4((bE._1 :+ toString((parseIntValue(cH[bG]) - cT))), (bE._2 :+ toString((parseIntValue(cO[bG]) + cT))), (bE._3 + fraction(cT, h, ai)), (bE._4 + cT))
545- else $Tuple4((bE._1 :+ cH[bG]), (bE._2 :+ cO[bG]), bE._3, bE._4)
538+func cS (cI,cP,cK) = {
539+ func cT (bF,bH) = {
540+ let cU = cK[bH]
541+ if ((cU > parseIntValue(cI[bH])))
542+ then throw(((((("You have " + cI[bH]) + " of ") + m[bH]) + ", but tried to exchange ") + toString(cU)))
543+ else if ((0 > cU))
544+ then throw(((("You tried to exchange negative amount of " + m[bH]) + ": ") + toString(cU)))
545+ else if ((cU > 0))
546+ then $Tuple4((bF._1 :+ toString((parseIntValue(cI[bH]) - cU))), (bF._2 :+ toString((parseIntValue(cP[bH]) + cU))), (bF._3 + fraction(cU, h, aj)), (bF._4 + cU))
547+ else $Tuple4((bF._1 :+ cI[bH]), (bF._2 :+ cP[bH]), bF._3, bF._4)
546548 }
547549
548- let ci = al
549- let cj = size(ci)
550- let ck = $Tuple4(nil, nil, 0, 0)
551- func cl (cm,cn) = if ((cn >= cj))
552- then cm
553- else cS(cm, ci[cn])
550+ let cj = am
551+ let ck = size(cj)
552+ let cl = $Tuple4(nil, nil, 0, 0)
553+ func cm (cn,co) = if ((co >= ck))
554+ then cn
555+ else cT(cn, cj[co])
554556
555- func co (cm,cn) = if ((cn >= cj))
556- then cm
557+ func cp (cn,co) = if ((co >= ck))
558+ then cn
557559 else throw("List size exceeds 6")
558560
559- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
561+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
560562 }
561563
562564
563-func cU (cV,cW,cX) = if ((cV > 0))
565+func cV (cW,cX,cY) = if ((cW > 0))
564566 then {
565- let cY = fraction(cV, aS, ah)
566- if ((cX >= (cV - (3 * cY))))
567- then throw(("This trade does not cover delivery cost of " + aJ(cX, 6)))
567+ let cZ = fraction(cW, aT, ai)
568+ if ((cY >= (cW - (3 * cZ))))
569+ then throw(("This trade does not cover delivery cost of " + aK(cY, 6)))
568570 else {
569- let cZ = N(cW)
570- let da = getString(aA, cZ)
571- let db = addressFromStringValue(cW)
572- (((if (isDefined(da))
573- then [ScriptTransfer(addressFromStringValue(value(da)), cY, ac)]
574- else nil) :+ ScriptTransfer(db, ((cV - (3 * cY)) - cX), ac)) :+ ScriptTransfer(az, cY, ac))
571+ let da = N(cX)
572+ let db = getString(aB, da)
573+ let dc = addressFromStringValue(cX)
574+ (((if (isDefined(db))
575+ then [ScriptTransfer(addressFromStringValue(value(db)), cZ, ad)]
576+ else nil) :+ ScriptTransfer(dc, ((cW - (3 * cZ)) - cY), ad)) :+ ScriptTransfer(aA, cZ, ad))
575577 }
576578 }
577579 else nil
578580
579581
580-func dc (dd,de,df,dg) = if ((dd > 0))
581- then if ((size(de) != 1))
582+func dd (de,df,dg,dh) = if ((de > 0))
583+ then if ((size(df) != 1))
582584 then throw("exactly 1 payment must be attached")
583585 else {
584- let dh = de[0]
585- let di = dh.amount
586- if (if (!(isDefined(dh.assetId)))
586+ let di = df[0]
587+ let dj = di.amount
588+ if (if (!(isDefined(di.assetId)))
587589 then true
588- else (value(dh.assetId) != ac))
590+ else (value(di.assetId) != ad))
589591 then throw("USDT payments only!")
590592 else {
591- let dj = (dd + dg)
592- if ((di != dj))
593- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(dd, 6)) + "+") + aJ(dg, 6)) + "(delivery fee)"))
594- else if ((ak > dd))
595- then throw(("Min shop trade is " + aJ(ak, 6)))
593+ let dk = (de + dh)
594+ if ((dj != dk))
595+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(de, 6)) + "+") + aK(dh, 6)) + "(delivery fee)"))
596+ else if ((al > de))
597+ then throw(("Min shop trade is " + aK(al, 6)))
596598 else {
597- let dk = fraction(dd, aS, ah)
598- let cZ = N(df)
599- let da = getString(aA, cZ)
600- (((if (isDefined(da))
601- then [ScriptTransfer(addressFromStringValue(value(da)), dk, ac)]
602- else nil) :+ ScriptTransfer(addressFromStringValue(df), (dd - (3 * dk)), ac)) :+ ScriptTransfer(az, dk, ac))
599+ let dl = fraction(de, aT, ai)
600+ let da = N(dg)
601+ let db = getString(aB, da)
602+ (((if (isDefined(db))
603+ then [ScriptTransfer(addressFromStringValue(value(db)), dl, ad)]
604+ else nil) :+ ScriptTransfer(addressFromStringValue(dg), (de - (3 * dl)), ad)) :+ ScriptTransfer(aA, dl, ad))
603605 }
604606 }
605607 }
606- else if ((size(de) != 0))
608+ else if ((size(df) != 0))
607609 then throw("No payments needed")
608610 else nil
609611
610612
611-func dl (dm,cW,dn,do,dp,dq) = {
612- let dr = value(assetInfo(fromBase58String(dm)))
613- if (!(isDefined(getInteger(aA, M(dm)))))
614- then throw((("NFT " + dr.name) + " is not staked"))
613+func dm (dn,cX,do,dp,dq,dr) = {
614+ let ds = value(assetInfo(fromBase58String(dn)))
615+ if (!(isDefined(getInteger(aB, M(dn)))))
616+ then throw((("NFT " + ds.name) + " is not staked"))
615617 else {
616- let df = valueOrErrorMessage(getString(aA, K(dm)), (("NFT " + dr.name) + " is orphaned"))
617- if ((df == cW))
618+ let dg = valueOrErrorMessage(getString(aB, K(dn)), (("NFT " + ds.name) + " is orphaned"))
619+ if ((dg == cX))
618620 then throw("You cannot trade with yourself")
619621 else {
620- let ds = split_4C(dn, ":")
621- if ((size(ds) != 3))
622+ let dt = split_4C(do, ":")
623+ if ((size(dt) != 3))
622624 then throw("bpOrderStr should contain exactly 2 ':' separators")
623625 else {
624- let dt = split(ds[0], "_")
625- let du = split(ds[1], "_")
626- let dv = if ((ds[2] == ""))
626+ let du = split(dt[0], "_")
627+ let dv = split(dt[1], "_")
628+ let dw = if ((dt[2] == ""))
627629 then nil
628- else split_4C(ds[2], "_")
629- if ((size(dt) != f))
630+ else split_4C(dt[2], "_")
631+ if ((size(du) != f))
630632 then throw("All 6 resources should be passed")
631- else if ((size(du) != f))
633+ else if ((size(dv) != f))
632634 then throw("All 6 materials should be passed")
633635 else {
634- let dw = aD(invoke(aA, "getWarehouseREADONLY", [dm], nil))
635- let bV = split_4C(dw, ":")
636- let bY = split(bV[x], "_")
637- let bZ = split(bV[y], "_")
638- let ca = if ((bV[z] == ""))
636+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [dn], nil))
637+ let bW = split_4C(dx, ":")
638+ let bZ = split(bW[x], "_")
639+ let ca = split(bW[y], "_")
640+ let cb = if ((bW[z] == ""))
639641 then nil
640- else split_4C(bV[z], "_")
641- let dx = parseIntValue(split(bV[A], "_")[B])
642- let bc = U(dm)
643- let dy = bb(bc)
644- let dz = split(dy[aY], "_")
645- let dA = split(dy[aZ], "_")
646- let dB = if ((dy[ba] == ""))
642+ else split_4C(bW[z], "_")
643+ let dy = parseIntValue(split(bW[A], "_")[B])
644+ let bd = U(dn)
645+ let dz = bc(bd)
646+ let dA = split(dz[aZ], "_")
647+ let dB = split(dz[ba], "_")
648+ let dC = if ((dz[bb] == ""))
647649 then nil
648- else split_4C(dy[ba], "_")
649- let ch = {
650- let ci = dt
651- let cj = size(ci)
652- let ck = $Tuple13(nil, nil, nil, 0, 0, 0, 0, do, bY, dz, m, false, 0)
653- func cl (cm,cn) = if ((cn >= cj))
654- then cm
655- else ct(cm, ci[cn])
650+ else split_4C(dz[bb], "_")
651+ let ci = {
652+ let cj = du
653+ let ck = size(cj)
654+ let cl = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dp, bZ, dA, m, false, 0)
655+ func cm (cn,co) = if ((co >= ck))
656+ then cn
657+ else cu(cn, cj[co])
656658
657- func co (cm,cn) = if ((cn >= cj))
658- then cm
659+ func cp (cn,co) = if ((co >= ck))
660+ then cn
659661 else throw("List size exceeds 6")
660662
661- co(cl(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5), 6)
663+ cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
662664 }
663- let bw = {
664- let ci = du
665- let cj = size(ci)
666- let ck = $Tuple13(nil, nil, nil, ch._4, ch._5, ch._6, 0, dp, bZ, dA, n, false, ch._13)
667- func cp (cm,cn) = if ((cn >= cj))
668- then cm
669- else ct(cm, ci[cn])
665+ let bx = {
666+ let cj = dv
667+ let ck = size(cj)
668+ let cl = $Tuple13(nil, nil, nil, ci._4, ci._5, ci._6, 0, dq, ca, dB, n, false, ci._13)
669+ func cq (cn,co) = if ((co >= ck))
670+ then cn
671+ else cu(cn, cj[co])
670672
671- func cq (cm,cn) = if ((cn >= cj))
672- then cm
673+ func cr (cn,co) = if ((co >= ck))
674+ then cn
673675 else throw("List size exceeds 6")
674676
675- cq(cp(cp(cp(cp(cp(cp(ck, 0), 1), 2), 3), 4), 5), 6)
677+ cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
676678 }
677- let bd = if ((size(dv) != 0))
679+ let be = if ((size(dw) != 0))
678680 then {
679- let ci = dv
680- let cj = size(ci)
681- let ck = $Tuple13(nil, nil, nil, bw._4, bw._5, bw._6, 0, dq, ca, dB, o, true, bw._13)
682- func cr (cm,cn) = if ((cn >= cj))
683- then cm
684- else ct(cm, ci[cn])
681+ let cj = dw
682+ let ck = size(cj)
683+ let cl = $Tuple13(nil, nil, nil, bx._4, bx._5, bx._6, 0, dr, cb, dC, o, true, bx._13)
684+ func cs (cn,co) = if ((co >= ck))
685+ then cn
686+ else cu(cn, cj[co])
685687
686- func cs (cm,cn) = if ((cn >= cj))
687- then cm
688+ func ct (cn,co) = if ((co >= ck))
689+ then cn
688690 else throw("List size exceeds 50")
689691
690- cs(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(cr(ck, 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)
692+ ct(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cs(cl, 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)
691693 }
692- else $Tuple13(ca, dB, dq, bw._4, bw._5, bw._6, 0, dq, ca, dB, o, true, bw._13)
693- let dC = bd._4
694- let dD = if ((0 > (dx - dC)))
694+ else $Tuple13(cb, dC, dr, bx._4, bx._5, bx._6, 0, dr, cb, dC, o, true, bx._13)
695+ let dD = be._4
696+ let dE = if ((0 > (dy - dD)))
695697 then 0
696- else (dx - dC)
697- let dE = makeString_2C([bV[w], makeString(ch._1, "_"), makeString(bw._1, "_"), makeString_2C(bd._1, "_"), toString(dD)], ":")
698- let dF = makeString_2C([makeString(ch._2, "_"), makeString(bw._2, "_"), makeString_2C(bd._2, "_")], ":")
699- let dG = aD(invoke(aA, "saveWarehouse", [dE, dm], nil))
700- let dH = aG(invoke(aA, "updateAccStats", [df, fraction(d, bd._13, ai)], nil))
701- $Tuple10(StringEntry(bc, dF), ch._3, bw._3, bd._3, bd._5, bd._6, bd._13, df, dG, dH)
698+ else (dy - dD)
699+ let dF = makeString_2C([bW[w], makeString(ci._1, "_"), makeString(bx._1, "_"), makeString_2C(be._1, "_"), toString(dE)], ":")
700+ let dG = makeString_2C([makeString(ci._2, "_"), makeString(bx._2, "_"), makeString_2C(be._2, "_")], ":")
701+ let dH = aE(invoke(aB, "saveWarehouse", [dF, dn], nil))
702+ let dI = aH(invoke(aB, "updateAccStats", [dg, fraction(d, be._13, aj)], nil))
703+ $Tuple10(StringEntry(bd, dG), ci._3, bx._3, be._3, be._5, be._6, be._13, dg, dH, dI)
702704 }
703705 }
704706 }
705707 }
706708 }
707709
708710
709-@Callable(dI)
710-func recalcLockedVolumeREADONLY (V,dw) = {
711- let bW = bb(U(V))
712- let dJ = bU(dw, bW, bW)
713- $Tuple2(nil, (dJ._4 + dJ._5))
711+@Callable(dJ)
712+func recalcLockedVolumeREADONLY (V,dx) = {
713+ let bX = bc(U(V))
714+ let dK = bV(dx, bX, bX)
715+ $Tuple2(nil, (dK._4 + dK._5))
714716 }
715717
716718
717719
718-@Callable(dI)
719-func constructorV1 (dK) = if ((dI.caller != this))
720+@Callable(dJ)
721+func constructorV1 (dL) = if ((dJ.caller != this))
720722 then throw("Permission denied")
721- else [StringEntry(at(), dK)]
723+ else [StringEntry(au(), dL)]
722724
723725
724726
725-@Callable(dI)
726-func sellResources (cJ,cK) = {
727- let dL = bC()
728- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
729- if ((size(dI.payments) != 0))
727+@Callable(dJ)
728+func sellResources (cK,cL) = {
729+ let dM = bD()
730+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
731+ if ((size(dJ.payments) != 0))
730732 then throw("sellResources doesn't require any payments")
731733 else {
732- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
733- if ((dM[I] != "F"))
734- then throw(("Duck location type should be Factory, but is " + dM[I]))
734+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
735+ if ((dN[I] != "F"))
736+ then throw(("Duck location type should be Factory, but is " + dN[I]))
735737 else {
736- let dN = bz(R(S))
737- let cH = split(dN[E], "_")
738- let dO = cG(cH, dM[J], cJ, cK)
739- let dP = dO._1
740- let dQ = dO._2
741- let bp = dO._3
742- let dR = dO._4
743- let dS = (bp / 100)
744- let dT = makeString_2C([dN[D], makeString(dQ, "_"), dN[F], dN[G]], ":")
745- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
746- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, dR, ai)], nil))
747- $Tuple2(((dP :+ ScriptTransfer(dI.caller, (bp - dS), ac)) :+ ScriptTransfer(az, dS, ac)), $Tuple3(dU, dL, dV))
738+ let dO = bA(R(S))
739+ let cI = split(dO[E], "_")
740+ let dP = cH(cI, dN[J], cK, cL)
741+ let dQ = dP._1
742+ let dR = dP._2
743+ let bq = dP._3
744+ let dS = dP._4
745+ let dT = (bq / 100)
746+ let dU = makeString_2C([dO[D], makeString(dR, "_"), dO[F], dO[G]], ":")
747+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
748+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
749+ $Tuple2(((dQ :+ ScriptTransfer(dJ.caller, (bq - dT), ad)) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dV, dM, dW))
748750 }
749751 }
750752 }
751753
752754
753755
754-@Callable(dI)
755-func sellResourcesWorld (O,bf) = if ((dI.caller != aC))
756+@Callable(dJ)
757+func sellResourcesWorld (O,bg) = if ((dJ.caller != aD))
756758 then throw("Permission denied")
757759 else {
758- let dW = (bf / 30)
759- let dX = [dW, dW, dW, dW, dW, dW]
760- let aF = toString(dW)
761- let cH = [aF, aF, aF, aF, aF, aF]
762- let cK = [0, 0, 0, 0, 0, 0]
763- func dY (bE,dZ) = {
764- let ea = cG(cH, dZ, dX, cK)
765- $Tuple3((bE._1 :+ ea._1), (bE._2 + ea._3), (bE._3 + ea._4))
760+ let dX = (bg / 30)
761+ let dY = [dX, dX, dX, dX, dX, dX]
762+ let aG = toString(dX)
763+ let cI = [aG, aG, aG, aG, aG, aG]
764+ let cL = [0, 0, 0, 0, 0, 0]
765+ func dZ (bF,ea) = {
766+ let eb = cH(cI, ea, dY, cL)
767+ $Tuple3((bF._1 :+ eb._1), (bF._2 + eb._3), (bF._3 + eb._4))
766768 }
767769
768- let eb = {
769- let ci = p
770- let cj = size(ci)
771- let ck = $Tuple3(nil, 0, 0)
772- func cl (cm,cn) = if ((cn >= cj))
773- then cm
774- else dY(cm, ci[cn])
770+ let ec = {
771+ let cj = p
772+ let ck = size(cj)
773+ let cl = $Tuple3(nil, 0, 0)
774+ func cm (cn,co) = if ((co >= ck))
775+ then cn
776+ else dZ(cn, cj[co])
775777
776- func co (cm,cn) = if ((cn >= cj))
777- then cm
778+ func cp (cn,co) = if ((co >= ck))
779+ then cn
778780 else throw("List size exceeds 5")
779781
780- co(cl(cl(cl(cl(cl(ck, 0), 1), 2), 3), 4), 5)
782+ cp(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5)
781783 }
782- let dP = eb._1
783- let bp = eb._2
784- let dR = eb._3
785- let dV = aG(invoke(aA, "updateAccStats", [O, fraction(a, dR, ai)], nil))
786- let ec = fraction(bp, aT, ah)
787- let ed = if ((k > ec))
784+ let dQ = ec._1
785+ let bq = ec._2
786+ let dS = ec._3
787+ let dW = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
788+ let ed = fraction(bq, aU, ai)
789+ let ee = if ((k > ed))
788790 then k
789- else ec
790- let dS = (bp / 100)
791- if ((ed >= (bp - dS)))
792- then throw(("This trade does not cover delivery cost of " + aJ(ed, 6)))
791+ else ed
792+ let dT = (bq / 100)
793+ if ((ee >= (bq - dT)))
794+ then throw(("This trade does not cover delivery cost of " + aK(ee, 6)))
793795 else {
794- let ee = ((bp - dS) - ed)
795- $Tuple2((((dP :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + ed))) :+ ScriptTransfer(az, dS, ac)) :+ ScriptTransfer(aB, ee, ac)), $Tuple2(ee, dV))
796+ let ef = ((bq - dT) - ee)
797+ $Tuple2((((dQ :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + ee))) :+ ScriptTransfer(aA, dT, ad)) :+ ScriptTransfer(aC, ef, ad)), $Tuple2(ef, dW))
796798 }
797799 }
798800
799801
800802
801-@Callable(dI)
802-func sellResourcesDuckDelivery (cJ,cK,ef) = if (!(aa))
803+@Callable(dJ)
804+func sellResourcesDuckDelivery (cK,cL,eg) = if (!(ab))
803805 then throw("Delivery feature is turned off!")
804806 else {
805- let dL = bC()
806- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
807- if ((size(dI.payments) != 0))
807+ let dM = bD()
808+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
809+ if ((size(dJ.payments) != 0))
808810 then throw("sellResources doesn't require any payments")
809811 else {
810- let dN = bz(R(S))
811- let cH = split(dN[E], "_")
812- let eg = cG(cH, ef, cJ, cK)
813- let dP = eg._1
814- let dQ = eg._2
815- let bp = eg._3
816- let dR = eg._4
817- let dT = makeString_2C([dN[D], makeString(dQ, "_"), dN[F], dN[G]], ":")
818- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
819- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, dR, ai)], nil))
820- let ec = fraction(bp, aT, ah)
821- let ed = if ((k > ec))
812+ let dO = bA(R(S))
813+ let cI = split(dO[E], "_")
814+ let eh = cH(cI, eg, cK, cL)
815+ let dQ = eh._1
816+ let dR = eh._2
817+ let bq = eh._3
818+ let dS = eh._4
819+ let dU = makeString_2C([dO[D], makeString(dR, "_"), dO[F], dO[G]], ":")
820+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
821+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
822+ let ed = fraction(bq, aU, ai)
823+ let ee = if ((k > ed))
822824 then k
823- else ec
824- let dS = (bp / 100)
825- if ((ed >= (bp - dS)))
826- then throw(("This trade does not cover delivery cost of " + aJ(ed, 6)))
825+ else ed
826+ let dT = (bq / 100)
827+ if ((ee >= (bq - dT)))
828+ then throw(("This trade does not cover delivery cost of " + aK(ee, 6)))
827829 else {
828- let eh = valueOrElse(getInteger(X), 0)
829- $Tuple2((((dP :+ ScriptTransfer(dI.caller, ((bp - dS) - ed), ac)) :+ IntegerEntry(X, (eh + ed))) :+ ScriptTransfer(az, dS, ac)), $Tuple3(dU, dL, dV))
830+ let ei = valueOrElse(getInteger(X), 0)
831+ $Tuple2((((dQ :+ ScriptTransfer(dJ.caller, ((bq - dT) - ee), ad)) :+ IntegerEntry(X, (ei + ee))) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dV, dM, dW))
830832 }
831833 }
832834 }
833835
834836
835837
836-@Callable(dI)
837-func sellResourcesLandDelivery (cJ,cK,V,ef) = if (!(aa))
838+@Callable(dJ)
839+func sellResourcesLandDelivery (cK,cL,V,eg) = if (!(ab))
838840 then throw("Delivery feature is turned off!")
839841 else {
840- let dL = bC()
841- if ((size(dI.payments) != 0))
842+ let dM = bD()
843+ if ((size(dJ.payments) != 0))
842844 then throw("sellResources doesn't require any payments")
843845 else {
844- let ei = dI.caller
845- let O = toString(ei)
846- let ej = value(assetInfo(fromBase58String(V)))
847- if (!(isDefined(getInteger(aA, M(V)))))
848- then throw((("NFT " + ej.name) + " is not staked"))
846+ let ej = dJ.caller
847+ let O = toString(ej)
848+ let ek = value(assetInfo(fromBase58String(V)))
849+ if (!(isDefined(getInteger(aB, M(V)))))
850+ then throw((("NFT " + ek.name) + " is not staked"))
849851 else {
850- let ek = valueOrErrorMessage(getString(aA, K(V)), (("NFT " + ej.name) + " is orphaned"))
851- if ((ek != O))
852+ let el = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + ek.name) + " is orphaned"))
853+ if ((el != O))
852854 then throw((e + " is not yours"))
853855 else {
854- let dw = aD(invoke(aA, "getWarehouseREADONLY", [V], nil))
855- let bV = split_4C(dw, ":")
856- let cH = split(bV[x], "_")
857- let el = cG(cH, ef, cJ, cK)
858- let dP = el._1
859- let dQ = el._2
860- let bp = el._3
861- let dR = el._4
862- let dE = makeString_2C([bV[w], makeString(dQ, "_"), bV[y], bV[z], bV[A]], ":")
863- let dG = aD(invoke(aA, "saveWarehouse", [dE, V], nil))
864- let dV = aG(invoke(aA, "updateAccStats", [O, fraction(a, dR, ai)], nil))
865- let ec = fraction(bp, aT, ah)
866- let ed = if ((k > ec))
856+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
857+ let bW = split_4C(dx, ":")
858+ let cI = split(bW[x], "_")
859+ let em = cH(cI, eg, cK, cL)
860+ let dQ = em._1
861+ let dR = em._2
862+ let bq = em._3
863+ let dS = em._4
864+ let dF = makeString_2C([bW[w], makeString(dR, "_"), bW[y], bW[z], bW[A]], ":")
865+ let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
866+ let dW = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
867+ let ed = fraction(bq, aU, ai)
868+ let ee = if ((k > ed))
867869 then k
868- else ec
869- let dS = (bp / 100)
870- if ((ed >= (bp - dS)))
871- then throw(("This trade does not cover delivery cost of " + aJ(ed, 6)))
870+ else ed
871+ let dT = (bq / 100)
872+ if ((ee >= (bq - dT)))
873+ then throw(("This trade does not cover delivery cost of " + aK(ee, 6)))
872874 else {
873- let eh = valueOrElse(getInteger(X), 0)
874- $Tuple2((((dP :+ ScriptTransfer(dI.caller, ((bp - dS) - ed), ac)) :+ IntegerEntry(X, (eh + ed))) :+ ScriptTransfer(az, dS, ac)), $Tuple3(dG, dL, dV))
875+ let ei = valueOrElse(getInteger(X), 0)
876+ $Tuple2((((dQ :+ ScriptTransfer(dJ.caller, ((bq - dT) - ee), ad)) :+ IntegerEntry(X, (ei + ee))) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dH, dM, dW))
875877 }
876878 }
877879 }
878880 }
879881 }
880882
881883
882884
883-@Callable(dI)
884-func buyMaterials (cJ,cP) = {
885- let dL = bC()
886- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
887- if ((size(dI.payments) != 1))
885+@Callable(dJ)
886+func buyMaterials (cK,cQ) = {
887+ let dM = bD()
888+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
889+ if ((size(dJ.payments) != 1))
888890 then throw("exactly 1 payment must be attached")
889891 else {
890- let dh = dI.payments[0]
891- let di = dh.amount
892- if (if (!(isDefined(dh.assetId)))
892+ let di = dJ.payments[0]
893+ let dj = di.amount
894+ if (if (!(isDefined(di.assetId)))
893895 then true
894- else (value(dh.assetId) != ac))
896+ else (value(di.assetId) != ad))
895897 then throw("USDT payments only!")
896898 else {
897- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
898- if ((dM[I] != "F"))
899- then throw(("Duck location type should be Factory, but is " + dM[I]))
899+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
900+ if ((dN[I] != "F"))
901+ then throw(("Duck location type should be Factory, but is " + dN[I]))
900902 else {
901- let dN = bz(R(S))
902- let cO = split(dN[F], "_")
903- let em = cN(cO, dM[J], cJ, cP)
904- let dP = em._1
905- let en = em._2
906- let bx = em._3
907- let eo = em._4
908- if ((bx > di))
909- then throw(((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)))
903+ let dO = bA(R(S))
904+ let cP = split(dO[F], "_")
905+ let en = cO(cP, dN[J], cK, cQ)
906+ let dQ = en._1
907+ let eo = en._2
908+ let by = en._3
909+ let ep = en._4
910+ if ((by > dj))
911+ then throw(((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)))
910912 else {
911- let dT = makeString([dN[D], dN[E], makeString(en, "_"), dN[G]], ":")
912- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
913- let av = if (((di - bx) > 0))
914- then [ScriptTransfer(dI.caller, (di - bx), ac)]
913+ let dU = makeString([dO[D], dO[E], makeString(eo, "_"), dO[G]], ":")
914+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
915+ let aw = if (((dj - by) > 0))
916+ then [ScriptTransfer(dJ.caller, (dj - by), ad)]
915917 else nil
916- let dS = (bx / 100)
917- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, eo, ai)], nil))
918- $Tuple2(((dP ++ av) :+ ScriptTransfer(az, dS, ac)), $Tuple3(dU, dL, dV))
918+ let dT = (by / 100)
919+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ep, aj)], nil))
920+ $Tuple2(((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dV, dM, dW))
919921 }
920922 }
921923 }
922924 }
923925 }
924926
925927
926928
927-@Callable(dI)
928-func buyMaterialsDuckDelivery (cJ,cP,ef) = if (!(aa))
929+@Callable(dJ)
930+func buyMaterialsDuckDelivery (cK,cQ,eg) = if (!(ab))
929931 then throw("Delivery feature is turned off!")
930932 else {
931- let dL = bC()
932- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
933- if ((size(dI.payments) != 1))
933+ let dM = bD()
934+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
935+ if ((size(dJ.payments) != 1))
934936 then throw("exactly 1 payment must be attached")
935937 else {
936- let dh = dI.payments[0]
937- let di = dh.amount
938- if (if (!(isDefined(dh.assetId)))
938+ let di = dJ.payments[0]
939+ let dj = di.amount
940+ if (if (!(isDefined(di.assetId)))
939941 then true
940- else (value(dh.assetId) != ac))
942+ else (value(di.assetId) != ad))
941943 then throw("USDT payments only!")
942944 else {
943- let dN = bz(R(S))
944- let cO = split(dN[F], "_")
945- let ep = cN(cO, ef, cJ, cP)
946- let dP = ep._1
947- let en = ep._2
948- let bx = ep._3
949- let eo = ep._4
950- let dT = makeString([dN[D], dN[E], makeString(en, "_"), dN[G]], ":")
951- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
952- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, eo, ai)], nil))
953- let ec = fraction(bx, aT, ah)
954- let ed = if ((k > ec))
945+ let dO = bA(R(S))
946+ let cP = split(dO[F], "_")
947+ let eq = cO(cP, eg, cK, cQ)
948+ let dQ = eq._1
949+ let eo = eq._2
950+ let by = eq._3
951+ let ep = eq._4
952+ let dU = makeString([dO[D], dO[E], makeString(eo, "_"), dO[G]], ":")
953+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
954+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ep, aj)], nil))
955+ let ed = fraction(by, aU, ai)
956+ let ee = if ((k > ed))
955957 then k
956- else ec
957- let dj = (bx + ed)
958- if ((dj > di))
959- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)) + "+") + aJ(ed, 6)) + "(delivery fee)"))
958+ else ed
959+ let dk = (by + ee)
960+ if ((dk > dj))
961+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(ee, 6)) + "(delivery fee)"))
960962 else {
961- let av = if (((di - dj) > 0))
962- then [ScriptTransfer(dI.caller, (di - dj), ac)]
963+ let aw = if (((dj - dk) > 0))
964+ then [ScriptTransfer(dJ.caller, (dj - dk), ad)]
963965 else nil
964- let dS = (bx / 100)
965- let eh = valueOrElse(getInteger(X), 0)
966- $Tuple2((((dP ++ av) :+ ScriptTransfer(az, dS, ac)) :+ IntegerEntry(X, (eh + ed))), $Tuple3(dU, dL, dV))
966+ let dT = (by / 100)
967+ let ei = valueOrElse(getInteger(X), 0)
968+ $Tuple2((((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ei + ee))), $Tuple3(dV, dM, dW))
967969 }
968970 }
969971 }
970972 }
971973
972974
973975
974-@Callable(dI)
975-func buyMaterialsLandDelivery (cJ,cP,V,ef) = if (!(aa))
976+@Callable(dJ)
977+func buyMaterialsLandDelivery (cK,cQ,V,eg) = if (!(ab))
976978 then throw("Delivery feature is turned off!")
977979 else {
978- let dL = bC()
979- if ((size(dI.payments) != 1))
980+ let dM = bD()
981+ if ((size(dJ.payments) != 1))
980982 then throw("exactly 1 payment must be attached")
981983 else {
982- let dh = dI.payments[0]
983- let di = dh.amount
984- if (if (!(isDefined(dh.assetId)))
984+ let di = dJ.payments[0]
985+ let dj = di.amount
986+ if (if (!(isDefined(di.assetId)))
985987 then true
986- else (value(dh.assetId) != ac))
988+ else (value(di.assetId) != ad))
987989 then throw("USDT payments only!")
988990 else {
989- let ei = dI.caller
990- let O = toString(ei)
991- let ej = value(assetInfo(fromBase58String(V)))
992- if (!(isDefined(getInteger(aA, M(V)))))
993- then throw((("NFT " + ej.name) + " is not staked"))
991+ let ej = dJ.caller
992+ let O = toString(ej)
993+ let ek = value(assetInfo(fromBase58String(V)))
994+ if (!(isDefined(getInteger(aB, M(V)))))
995+ then throw((("NFT " + ek.name) + " is not staked"))
994996 else {
995- let ek = valueOrErrorMessage(getString(aA, K(V)), (("NFT " + ej.name) + " is orphaned"))
996- if ((ek != O))
997+ let el = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + ek.name) + " is orphaned"))
998+ if ((el != O))
997999 then throw((e + " is not yours"))
9981000 else {
999- let dw = aD(invoke(aA, "getWarehouseREADONLY", [V], nil))
1000- let bV = split_4C(dw, ":")
1001- let cO = split(bV[y], "_")
1002- let eq = cN(cO, ef, cJ, cP)
1003- let dP = eq._1
1004- let en = eq._2
1005- let bx = eq._3
1006- let eo = eq._4
1007- let dE = makeString_2C([bV[w], bV[x], makeString(en, "_"), bV[z], bV[A]], ":")
1008- let dG = aD(invoke(aA, "saveWarehouse", [dE, V], nil))
1009- let dV = aG(invoke(aA, "updateAccStats", [O, fraction(a, eo, ai)], nil))
1010- let ec = fraction(bx, aT, ah)
1011- let ed = if ((k > ec))
1001+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1002+ let bW = split_4C(dx, ":")
1003+ let cP = split(bW[y], "_")
1004+ let er = cO(cP, eg, cK, cQ)
1005+ let dQ = er._1
1006+ let eo = er._2
1007+ let by = er._3
1008+ let ep = er._4
1009+ let dF = makeString_2C([bW[w], bW[x], makeString(eo, "_"), bW[z], bW[A]], ":")
1010+ let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1011+ let dW = aH(invoke(aB, "updateAccStats", [O, fraction(a, ep, aj)], nil))
1012+ let ed = fraction(by, aU, ai)
1013+ let ee = if ((k > ed))
10121014 then k
1013- else ec
1014- let dj = (bx + ed)
1015- if ((dj > di))
1016- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)) + "+") + aJ(ed, 6)) + "(delivery fee)"))
1015+ else ed
1016+ let dk = (by + ee)
1017+ if ((dk > dj))
1018+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(ee, 6)) + "(delivery fee)"))
10171019 else {
1018- let av = if (((di - dj) > 0))
1019- then [ScriptTransfer(dI.caller, (di - dj), ac)]
1020+ let aw = if (((dj - dk) > 0))
1021+ then [ScriptTransfer(dJ.caller, (dj - dk), ad)]
10201022 else nil
1021- let dS = (bx / 100)
1022- let eh = valueOrElse(getInteger(X), 0)
1023- $Tuple2((((dP ++ av) :+ ScriptTransfer(az, dS, ac)) :+ IntegerEntry(X, (eh + ed))), $Tuple3(dG, dL, dV))
1023+ let dT = (by / 100)
1024+ let ei = valueOrElse(getInteger(X), 0)
1025+ $Tuple2((((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ei + ee))), $Tuple3(dH, dM, dW))
10241026 }
10251027 }
10261028 }
10271029 }
10281030 }
10291031 }
10301032
10311033
10321034
1033-@Callable(dI)
1034-func exchangeResources (cJ) = {
1035- let dL = bC()
1036- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
1037- if ((size(dI.payments) != 1))
1035+@Callable(dJ)
1036+func exchangeResources (cK) = {
1037+ let dM = bD()
1038+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
1039+ if ((size(dJ.payments) != 1))
10381040 then throw("exactly 1 payment must be attached")
10391041 else {
1040- let dh = dI.payments[0]
1041- let di = dh.amount
1042- if (if (!(isDefined(dh.assetId)))
1042+ let di = dJ.payments[0]
1043+ let dj = di.amount
1044+ if (if (!(isDefined(di.assetId)))
10431045 then true
1044- else (value(dh.assetId) != ac))
1046+ else (value(di.assetId) != ad))
10451047 then throw("USDT payments only!")
10461048 else {
1047- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
1048- if ((dM[I] != "F"))
1049- then throw(("Duck location type should be Factory, but is " + dM[I]))
1049+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
1050+ if ((dN[I] != "F"))
1051+ then throw(("Duck location type should be Factory, but is " + dN[I]))
10501052 else {
1051- let dN = bz(R(S))
1052- let cH = split(dN[E], "_")
1053- let cO = split(dN[F], "_")
1054- let er = cR(cH, cO, cJ)
1055- let dQ = er._1
1056- let en = er._2
1057- let bx = er._3
1058- let es = er._4
1059- if ((bx > di))
1060- then throw(((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)))
1053+ let dO = bA(R(S))
1054+ let cI = split(dO[E], "_")
1055+ let cP = split(dO[F], "_")
1056+ let es = cS(cI, cP, cK)
1057+ let dR = es._1
1058+ let eo = es._2
1059+ let by = es._3
1060+ let et = es._4
1061+ if ((by > dj))
1062+ then throw(((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)))
10611063 else {
1062- let dT = makeString([dN[D], makeString(dQ, "_"), makeString(en, "_"), dN[G]], ":")
1063- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
1064- let av = if (((di - bx) > 0))
1065- then [ScriptTransfer(dI.caller, (di - bx), ac)]
1064+ let dU = makeString([dO[D], makeString(dR, "_"), makeString(eo, "_"), dO[G]], ":")
1065+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
1066+ let aw = if (((dj - by) > 0))
1067+ then [ScriptTransfer(dJ.caller, (dj - by), ad)]
10661068 else nil
1067- let dS = (bx / 100)
1068- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, es, ai)], nil))
1069- $Tuple2((av :+ ScriptTransfer(az, dS, ac)), $Tuple3(dU, dL, dV))
1069+ let dT = (by / 100)
1070+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, et, aj)], nil))
1071+ $Tuple2((aw :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dV, dM, dW))
10701072 }
10711073 }
10721074 }
10731075 }
10741076 }
10751077
10761078
10771079
1078-@Callable(dI)
1079-func exchangeResourcesDuckDelivery (cJ) = {
1080- let dL = bC()
1081- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
1082- if ((size(dI.payments) != 1))
1080+@Callable(dJ)
1081+func exchangeResourcesDuckDelivery (cK) = {
1082+ let dM = bD()
1083+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
1084+ if ((size(dJ.payments) != 1))
10831085 then throw("exactly 1 payment must be attached")
10841086 else {
1085- let dh = dI.payments[0]
1086- let di = dh.amount
1087- if (if (!(isDefined(dh.assetId)))
1087+ let di = dJ.payments[0]
1088+ let dj = di.amount
1089+ if (if (!(isDefined(di.assetId)))
10881090 then true
1089- else (value(dh.assetId) != ac))
1091+ else (value(di.assetId) != ad))
10901092 then throw("USDT payments only!")
10911093 else {
1092- let dN = bz(R(S))
1093- let cH = split(dN[E], "_")
1094- let cO = split(dN[F], "_")
1095- let et = cR(cH, cO, cJ)
1096- let dQ = et._1
1097- let en = et._2
1098- let bx = et._3
1099- let es = et._4
1100- let ec = fraction(bx, aU, ah)
1101- let ed = if ((l > ec))
1094+ let dO = bA(R(S))
1095+ let cI = split(dO[E], "_")
1096+ let cP = split(dO[F], "_")
1097+ let eu = cS(cI, cP, cK)
1098+ let dR = eu._1
1099+ let eo = eu._2
1100+ let by = eu._3
1101+ let et = eu._4
1102+ let ed = fraction(by, aV, ai)
1103+ let ee = if ((l > ed))
11021104 then l
1103- else ec
1104- let dj = (bx + ed)
1105- if ((dj > di))
1106- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)) + "+") + aJ(ed, 6)) + "(delivery fee)"))
1105+ else ed
1106+ let dk = (by + ee)
1107+ if ((dk > dj))
1108+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(ee, 6)) + "(delivery fee)"))
11071109 else {
1108- let dT = makeString([dN[D], makeString(dQ, "_"), makeString(en, "_"), dN[G]], ":")
1109- let dU = aD(invoke(aA, "updateBackpack", [S, dT], nil))
1110- let av = if (((di - dj) > 0))
1111- then [ScriptTransfer(dI.caller, (di - dj), ac)]
1110+ let dU = makeString([dO[D], makeString(dR, "_"), makeString(eo, "_"), dO[G]], ":")
1111+ let dV = aE(invoke(aB, "updateBackpack", [S, dU], nil))
1112+ let aw = if (((dj - dk) > 0))
1113+ then [ScriptTransfer(dJ.caller, (dj - dk), ad)]
11121114 else nil
1113- let dS = (bx / 100)
1114- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(a, es, ai)], nil))
1115- let eh = valueOrElse(getInteger(X), 0)
1116- $Tuple2(((av :+ ScriptTransfer(az, dS, ac)) :+ IntegerEntry(X, (eh + ed))), $Tuple3(dU, dL, dV))
1115+ let dT = (by / 100)
1116+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(a, et, aj)], nil))
1117+ let ei = valueOrElse(getInteger(X), 0)
1118+ $Tuple2(((aw :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ei + ee))), $Tuple3(dV, dM, dW))
11171119 }
11181120 }
11191121 }
11201122 }
11211123
11221124
11231125
1124-@Callable(dI)
1125-func exchangeResourcesLandDelivery (cJ,V) = {
1126- let dL = bC()
1127- if ((size(dI.payments) != 1))
1126+@Callable(dJ)
1127+func exchangeResourcesLandDelivery (cK,V) = {
1128+ let dM = bD()
1129+ if ((size(dJ.payments) != 1))
11281130 then throw("exactly 1 payment must be attached")
11291131 else {
1130- let dh = dI.payments[0]
1131- let di = dh.amount
1132- if (if (!(isDefined(dh.assetId)))
1132+ let di = dJ.payments[0]
1133+ let dj = di.amount
1134+ if (if (!(isDefined(di.assetId)))
11331135 then true
1134- else (value(dh.assetId) != ac))
1136+ else (value(di.assetId) != ad))
11351137 then throw("USDT payments only!")
11361138 else {
1137- let ei = dI.caller
1138- let O = toString(ei)
1139- let ej = value(assetInfo(fromBase58String(V)))
1140- if (!(isDefined(getInteger(aA, M(V)))))
1141- then throw((("NFT " + ej.name) + " is not staked"))
1139+ let ej = dJ.caller
1140+ let O = toString(ej)
1141+ let ek = value(assetInfo(fromBase58String(V)))
1142+ if (!(isDefined(getInteger(aB, M(V)))))
1143+ then throw((("NFT " + ek.name) + " is not staked"))
11421144 else {
1143- let ek = valueOrErrorMessage(getString(aA, K(V)), (("NFT " + ej.name) + " is orphaned"))
1144- if ((ek != O))
1145+ let el = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + ek.name) + " is orphaned"))
1146+ if ((el != O))
11451147 then throw((e + " is not yours"))
11461148 else {
1147- let dw = aD(invoke(aA, "getWarehouseREADONLY", [V], nil))
1148- let bV = split_4C(dw, ":")
1149- let cH = split(bV[x], "_")
1150- let cO = split(bV[y], "_")
1151- let eu = cR(cH, cO, cJ)
1152- let dQ = eu._1
1153- let en = eu._2
1154- let bx = eu._3
1155- let es = eu._4
1156- let dE = makeString_2C([bV[w], makeString(dQ, "_"), makeString(en, "_"), bV[z], bV[A]], ":")
1157- let dG = aD(invoke(aA, "saveWarehouse", [dE, V], nil))
1158- let dV = aG(invoke(aA, "updateAccStats", [O, fraction(a, es, ai)], nil))
1159- let ec = fraction(bx, aU, ah)
1160- let ed = if ((l > ec))
1149+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1150+ let bW = split_4C(dx, ":")
1151+ let cI = split(bW[x], "_")
1152+ let cP = split(bW[y], "_")
1153+ let ev = cS(cI, cP, cK)
1154+ let dR = ev._1
1155+ let eo = ev._2
1156+ let by = ev._3
1157+ let et = ev._4
1158+ let dF = makeString_2C([bW[w], makeString(dR, "_"), makeString(eo, "_"), bW[z], bW[A]], ":")
1159+ let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1160+ let dW = aH(invoke(aB, "updateAccStats", [O, fraction(a, et, aj)], nil))
1161+ let ed = fraction(by, aV, ai)
1162+ let ee = if ((l > ed))
11611163 then l
1162- else ec
1163- let dj = (bx + ed)
1164- if ((dj > di))
1165- then throw((((((("Insufficient payment! Attached=" + aJ(di, 6)) + ", required=") + aJ(bx, 6)) + "+") + aJ(ed, 6)) + "(delivery fee)"))
1164+ else ed
1165+ let dk = (by + ee)
1166+ if ((dk > dj))
1167+ then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(ee, 6)) + "(delivery fee)"))
11661168 else {
1167- let av = if (((di - dj) > 0))
1168- then [ScriptTransfer(dI.caller, (di - dj), ac)]
1169+ let aw = if (((dj - dk) > 0))
1170+ then [ScriptTransfer(dJ.caller, (dj - dk), ad)]
11691171 else nil
1170- let dS = (bx / 100)
1171- let eh = valueOrElse(getInteger(X), 0)
1172- $Tuple2(((av :+ ScriptTransfer(az, dS, ac)) :+ IntegerEntry(X, (eh + ed))), $Tuple3(dG, dL, dV))
1172+ let dT = (by / 100)
1173+ let ei = valueOrElse(getInteger(X), 0)
1174+ $Tuple2(((aw :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ei + ee))), $Tuple3(dH, dM, dW))
11731175 }
11741176 }
11751177 }
11761178 }
11771179 }
11781180 }
11791181
11801182
11811183
1182-@Callable(dI)
1183-func craftGoods (ev,ew) = {
1184- let dL = bC()
1185- if ((size(dI.payments) != 1))
1184+@Callable(dJ)
1185+func craftGoods (ew,ex) = {
1186+ let dM = bD()
1187+ if ((size(dJ.payments) != 1))
11861188 then throw("exactly 1 payment must be attached")
11871189 else {
1188- let dh = dI.payments[0]
1189- let di = dh.amount
1190- let ex = valueOrErrorMessage(dh.assetId, "WAVES can't be used as payment")
1191- if ((ex != ac))
1190+ let di = dJ.payments[0]
1191+ let dj = di.amount
1192+ let ey = valueOrErrorMessage(di.assetId, "WAVES can't be used as payment")
1193+ if ((ey != ad))
11921194 then throw("USDT payments only!")
1193- else if ((di != ah))
1195+ else if ((dj != ai))
11941196 then throw("exactly 1 USDT must be attached as payment")
1195- else if ((0 >= ew))
1197+ else if ((0 >= ex))
11961198 then throw("Quantity should be positive")
11971199 else {
1198- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
1199- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
1200- if ((dM[I] != "M"))
1201- then throw(("Duck location type should be Manufactory, but is " + dM[I]))
1200+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
1201+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
1202+ if ((dN[I] != "M"))
1203+ then throw(("Duck location type should be Manufactory, but is " + dN[I]))
12021204 else {
1203- let ey = dM[H]
1204- let dN = bz(R(S))
1205- let cO = split(dN[F], "_")
1206- if (if ((0 > ev))
1205+ let ez = dN[H]
1206+ let dO = bA(R(S))
1207+ let cP = split(dO[F], "_")
1208+ if (if ((0 > ew))
12071209 then true
1208- else (ev >= size(r)))
1209- then throw(("Unknown product idx=" + toString(ev)))
1210+ else (ew >= size(r)))
1211+ then throw(("Unknown product idx=" + toString(ew)))
12101212 else {
1211- let Z = split(r[ev], "_")
1212- if ((size(Z) != u))
1213- then throw(("Fatal: unknown recipe: " + r[ev]))
1213+ let aa = split(r[ew], "_")
1214+ if ((size(aa) != u))
1215+ then throw(("Fatal: unknown recipe: " + r[ew]))
12141216 else {
1215- let ez = parseIntValue(Z[t])
1216- if ((p[ez] != ey))
1217- then throw(((("This product is available in " + p[ez]) + ", but you are in ") + ey))
1217+ let eA = parseIntValue(aa[t])
1218+ if ((p[eA] != ez))
1219+ then throw(((("This product is available in " + p[eA]) + ", but you are in ") + ez))
12181220 else {
1219- let eA = if ((dN[G] == ""))
1221+ let eB = if ((dO[G] == ""))
12201222 then nil
1221- else split_4C(dN[G], "_")
1222- func eB (bE,eC) = {
1223- let aH = bE._2
1224- let eD = if ((size(eA) > aH))
1225- then eA[aH]
1223+ else split_4C(dO[G], "_")
1224+ func eC (bF,eD) = {
1225+ let aI = bF._2
1226+ let eE = if ((size(eB) > aI))
1227+ then eB[aI]
12261228 else "0"
1227- let ea = parseIntValue(eD)
1228- let bf = (ew * v)
1229- let eE = if ((aH == ev))
1230- then toString((ea + bf))
1231- else eD
1232- $Tuple2((bE._1 :+ eE), (aH + 1))
1229+ let eb = parseIntValue(eE)
1230+ let bg = (ex * v)
1231+ let eF = if ((aI == ew))
1232+ then toString((eb + bg))
1233+ else eE
1234+ $Tuple2((bF._1 :+ eF), (aI + 1))
12331235 }
12341236
1235- let eF = ( let ci = r
1236- let cj = size(ci)
1237- let ck = $Tuple2(nil, 0)
1238- func cl (cm,cn) = if ((cn >= cj))
1239- then cm
1240- else eB(cm, ci[cn])
1237+ let eG = ( let cj = r
1238+ let ck = size(cj)
1239+ let cl = $Tuple2(nil, 0)
1240+ func cm (cn,co) = if ((co >= ck))
1241+ then cn
1242+ else eC(cn, cj[co])
12411243
1242- func co (cm,cn) = if ((cn >= cj))
1243- then cm
1244+ func cp (cn,co) = if ((co >= ck))
1245+ then cn
12441246 else throw("List size exceeds 50")
12451247
1246- co(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(ck, 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
1247- func eG (bE,bG) = {
1248- let eH = (((parseIntValue(Z[bG]) * ag) * ew) * parseIntValue(Z[s]))
1249- let eI = parseIntValue(cO[bG])
1250- if ((eH > eI))
1251- then throw(((((((("You have " + aJ(eI, 8)) + " of ") + n[bG]) + ", but recipe requires ") + aJ(eH, 8)) + " for quantity ") + toString(ew)))
1252- else if ((eH > 0))
1253- then $Tuple2((bE._1 :+ toString((eI - eH))), (bE._2 + eH))
1254- else $Tuple2((bE._1 :+ cO[bG]), bE._2)
1248+ cp(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cl, 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
1249+ func eH (bF,bH) = {
1250+ let eI = (((parseIntValue(aa[bH]) * ah) * ex) * parseIntValue(aa[s]))
1251+ let eJ = parseIntValue(cP[bH])
1252+ if ((eI > eJ))
1253+ then throw(((((((("You have " + aK(eJ, 8)) + " of ") + n[bH]) + ", but recipe requires ") + aK(eI, 8)) + " for quantity ") + toString(ex)))
1254+ else if ((eI > 0))
1255+ then $Tuple2((bF._1 :+ toString((eJ - eI))), (bF._2 + eI))
1256+ else $Tuple2((bF._1 :+ cP[bH]), bF._2)
12551257 }
12561258
1257- let eJ = {
1258- let ci = al
1259- let cj = size(ci)
1260- let ck = $Tuple2(nil, 0)
1261- func cp (cm,cn) = if ((cn >= cj))
1262- then cm
1263- else eG(cm, ci[cn])
1259+ let eK = {
1260+ let cj = am
1261+ let ck = size(cj)
1262+ let cl = $Tuple2(nil, 0)
1263+ func cq (cn,co) = if ((co >= ck))
1264+ then cn
1265+ else eH(cn, cj[co])
12641266
1265- func cq (cm,cn) = if ((cn >= cj))
1266- then cm
1267+ func cr (cn,co) = if ((co >= ck))
1268+ then cn
12671269 else throw("List size exceeds 6")
12681270
1269- cq(cp(cp(cp(cp(cp(cp(ck, 0), 1), 2), 3), 4), 5), 6)
1271+ cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
12701272 }
1271- let dT = makeString([dN[D], dN[E], makeString(eJ._1, "_"), makeString_2C(eF, "_")], ":")
1272- let eK = aD(invoke(aA, "updateBackpack", [S, dT], nil))
1273- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(b, eJ._2, ai)], nil))
1274- $Tuple2(nil, $Tuple3(eK, dL, dV))
1273+ let dU = makeString([dO[D], dO[E], makeString(eK._1, "_"), makeString_2C(eG, "_")], ":")
1274+ let eL = aE(invoke(aB, "updateBackpack", [S, dU], nil))
1275+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(b, eK._2, aj)], nil))
1276+ $Tuple2(nil, $Tuple3(eL, dM, dW))
12751277 }
12761278 }
12771279 }
12781280 }
12791281 }
12801282 }
12811283 }
12821284
12831285
12841286
1285-@Callable(dI)
1286-func setWarehouseOrder (eL,V) = {
1287- let ei = dI.originCaller
1288- let O = toString(ei)
1289- let eK = if ((ei != az))
1290- then bB()
1287+@Callable(dJ)
1288+func setWarehouseOrder (eM,V) = {
1289+ let ej = dJ.originCaller
1290+ let O = toString(ej)
1291+ let eL = if ((ej != aA))
1292+ then bC()
12911293 else false
1292- let ej = value(assetInfo(fromBase58String(V)))
1293- if (!(isDefined(getInteger(aA, M(V)))))
1294- then throw((("NFT " + ej.name) + " is not staked"))
1294+ let ek = value(assetInfo(fromBase58String(V)))
1295+ if (!(isDefined(getInteger(aB, M(V)))))
1296+ then throw((("NFT " + ek.name) + " is not staked"))
12951297 else {
1296- let ek = valueOrErrorMessage(getString(aA, K(V)), (("NFT " + ej.name) + " is orphaned"))
1297- if (if ((ei != az))
1298- then (ek != O)
1298+ let el = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + ek.name) + " is orphaned"))
1299+ if (if ((ej != aA))
1300+ then (el != O)
12991301 else false)
13001302 then throw((e + " is not yours"))
13011303 else {
1302- let eM = split_4C(eL, ":")
1303- let dw = aD(invoke(aA, "getWarehouseREADONLY", [V], nil))
1304- let bV = split_4C(dw, ":")
1305- let eN = split(bV[A], "_")
1306- let eO = parseIntValue(eN[C])
1307- let bc = U(V)
1308- let bW = bb(bc)
1309- let dJ = bU(bV, bW, eM)
1310- let eP = dJ._4
1311- let eQ = dJ._5
1312- let eR = dJ._7
1313- let eS = (eP + eQ)
1314- let eT = ((eO - eR) - eS)
1315- if ((0 > eT))
1316- then throw((((((("Attempt to reserve " + toString(eP)) + " space for buy orders, and ") + toString(eQ)) + " space for sell orders (and occupied=") + toString(eR)) + "), leads to negative free space"))
1304+ let eN = split_4C(eM, ":")
1305+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1306+ let bW = split_4C(dx, ":")
1307+ let eO = split(bW[A], "_")
1308+ let eP = parseIntValue(eO[C])
1309+ let bd = U(V)
1310+ let bX = bc(bd)
1311+ let dK = bV(bW, bX, eN)
1312+ let eQ = dK._4
1313+ let eR = dK._5
1314+ let eS = dK._7
1315+ let eT = (eQ + eR)
1316+ let eU = ((eP - eS) - eT)
1317+ if ((0 > eU))
1318+ then throw((((((("Attempt to reserve " + toString(eQ)) + " space for buy orders, and ") + toString(eR)) + " space for sell orders (and occupied=") + toString(eS)) + "), leads to negative free space"))
13171319 else {
1318- let dE = makeString_2C([bV[w], makeString(dJ._1, "_"), makeString(dJ._2, "_"), makeString_2C(dJ._3, "_"), toString(eS)], ":")
1319- let dG = aD(invoke(aA, "saveWarehouse", [dE, V], nil))
1320- let eU = dJ._6
1321- let eV = if ((eU > 0))
1322- then if ((size(dI.payments) != 1))
1320+ let dF = makeString_2C([bW[w], makeString(dK._1, "_"), makeString(dK._2, "_"), makeString_2C(dK._3, "_"), toString(eT)], ":")
1321+ let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1322+ let eV = dK._6
1323+ let eW = if ((eV > 0))
1324+ then if ((size(dJ.payments) != 1))
13231325 then throw("exactly 1 payment must be attached")
13241326 else {
1325- let dh = dI.payments[0]
1326- let di = dh.amount
1327- let ex = valueOrErrorMessage(dh.assetId, "WAVES can't be used as payment")
1328- if ((ex != ac))
1327+ let di = dJ.payments[0]
1328+ let dj = di.amount
1329+ let ey = valueOrErrorMessage(di.assetId, "WAVES can't be used as payment")
1330+ if ((ey != ad))
13291331 then throw("USDT payments only!")
1330- else if ((di != eU))
1331- then throw(("Payment needed is " + toString(eU)))
1332- else [StringEntry(bc, eL)]
1332+ else if ((dj != eV))
1333+ then throw(("Payment needed is " + toString(eV)))
1334+ else [StringEntry(bd, eM)]
13331335 }
1334- else if ((eU == 0))
1335- then if ((size(dI.payments) != 0))
1336+ else if ((eV == 0))
1337+ then if ((size(dJ.payments) != 0))
13361338 then throw("No payments needed")
1337- else [StringEntry(bc, eL)]
1338- else if ((size(dI.payments) != 0))
1339+ else [StringEntry(bd, eM)]
1340+ else if ((size(dJ.payments) != 0))
13391341 then throw("No payments needed")
1340- else [ScriptTransfer(addressFromStringValue(ek), -(eU), ac), StringEntry(bc, eL)]
1341- $Tuple2(eV, $Tuple2(eK, dG))
1342+ else [ScriptTransfer(addressFromStringValue(el), -(eV), ad), StringEntry(bd, eM)]
1343+ $Tuple2(eW, $Tuple2(eL, dH))
13421344 }
13431345 }
13441346 }
13451347 }
13461348
13471349
13481350
1349-@Callable(dI)
1350-func acceptWarehouseOrder (dn,dm,S) = {
1351- let dL = bC()
1352- let db = dI.originCaller
1353- let cW = toString(db)
1354- let eW = valueOrErrorMessage(getString(aA, P(cW)), "You don't have a duck staked")
1355- let dM = valueOrElse(getString(aA, T(eW)), g)
1356- let eX = split(value(dM), "_")
1357- if ((eX[I] != "L"))
1358- then throw((("Duck location type is " + eX[I]) + ", but should be L"))
1359- else if ((eW != S))
1360- then throw(((("Your staked duck is " + eW) + ", but passed ") + S))
1351+@Callable(dJ)
1352+func acceptWarehouseOrder (do,dn,S) = {
1353+ let dM = bD()
1354+ let dc = dJ.originCaller
1355+ let cX = toString(dc)
1356+ let eX = valueOrErrorMessage(getString(aB, P(cX)), "You don't have a duck staked")
1357+ let dN = valueOrElse(getString(aB, T(eX)), g)
1358+ let eY = split(value(dN), "_")
1359+ if ((eY[I] != "L"))
1360+ then throw((("Duck location type is " + eY[I]) + ", but should be L"))
1361+ else if ((eX != S))
1362+ then throw(((("Your staked duck is " + eX) + ", but passed ") + S))
13611363 else {
1362- let bA = R(S)
1363- let dN = bz(bA)
1364- let do = split(dN[E], "_")
1365- let dp = split(dN[F], "_")
1366- let dq = if ((dN[G] == ""))
1364+ let bB = R(S)
1365+ let dO = bA(bB)
1366+ let dp = split(dO[E], "_")
1367+ let dq = split(dO[F], "_")
1368+ let dr = if ((dO[G] == ""))
13671369 then nil
1368- else split_4C(dN[G], "_")
1369- let eY = dl(dm, cW, dn, do, dp, dq)
1370- let eZ = eY._1
1371- let fa = eY._2
1372- let fb = eY._3
1373- let fc = eY._4
1374- let cV = eY._5
1375- let dd = eY._6
1376- let fd = eY._7
1377- let df = eY._8
1378- let fe = eY._9
1379- let dH = eY._10
1380- let ff = [eZ, cU(cV, cW, 0)]
1381- let fg = dc(dd, dI.payments, df, 0)
1382- let fh = makeString_2C([dN[D], makeString(fa, "_"), makeString(fb, "_"), makeString_2C(fc, "_")], ":")
1383- let fi = aD(invoke(aA, "updateBackpack", [S, fh], nil))
1384- let fj = aG(invoke(aA, "updateDuckStats", [S, fraction(d, fd, ai)], nil))
1385- $Tuple2((ff ++ fg), $Tuple5(dL, fe, fi, fj, dH))
1370+ else split_4C(dO[G], "_")
1371+ let eZ = dm(dn, cX, do, dp, dq, dr)
1372+ let fa = eZ._1
1373+ let fb = eZ._2
1374+ let fc = eZ._3
1375+ let fd = eZ._4
1376+ let cW = eZ._5
1377+ let de = eZ._6
1378+ let fe = eZ._7
1379+ let dg = eZ._8
1380+ let ff = eZ._9
1381+ let dI = eZ._10
1382+ let fg = [fa, cV(cW, cX, 0)]
1383+ let fh = dd(de, dJ.payments, dg, 0)
1384+ let fi = makeString_2C([dO[D], makeString(fb, "_"), makeString(fc, "_"), makeString_2C(fd, "_")], ":")
1385+ let fj = aE(invoke(aB, "updateBackpack", [S, fi], nil))
1386+ let fk = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fe, aj)], nil))
1387+ $Tuple2((fg ++ fh), $Tuple5(dM, ff, fj, fk, dI))
13861388 }
13871389 }
13881390
13891391
13901392
1391-@Callable(dI)
1392-func acceptShopOrderDuckDelivery (fk,dm) = if (!(aa))
1393+@Callable(dJ)
1394+func acceptShopOrderDuckDelivery (fl,dn) = if (!(ab))
13931395 then throw("Delivery feature is turned off!")
13941396 else {
1395- let dL = bC()
1396- let db = dI.originCaller
1397- let cW = toString(db)
1398- let S = valueOrErrorMessage(getString(aA, P(cW)), "You don't have a duck staked")
1399- let bA = R(S)
1400- let dN = bz(bA)
1401- let do = split(dN[E], "_")
1402- let dp = split(dN[F], "_")
1403- let dq = if ((dN[G] == ""))
1397+ let dM = bD()
1398+ let dc = dJ.originCaller
1399+ let cX = toString(dc)
1400+ let S = valueOrErrorMessage(getString(aB, P(cX)), "You don't have a duck staked")
1401+ let bB = R(S)
1402+ let dO = bA(bB)
1403+ let dp = split(dO[E], "_")
1404+ let dq = split(dO[F], "_")
1405+ let dr = if ((dO[G] == ""))
14041406 then nil
1405- else split_4C(dN[G], "_")
1406- let fl = dl(dm, cW, fk, do, dp, dq)
1407- let eZ = fl._1
1408- let fa = fl._2
1409- let fb = fl._3
1410- let fc = fl._4
1411- let cV = fl._5
1412- let dd = fl._6
1413- let fd = fl._7
1414- let df = fl._8
1415- let fe = fl._9
1416- let dH = fl._10
1417- let fm = fraction((dd + cV), aT, ah)
1418- let fn = if ((k > fm))
1407+ else split_4C(dO[G], "_")
1408+ let fm = dm(dn, cX, fl, dp, dq, dr)
1409+ let fa = fm._1
1410+ let fb = fm._2
1411+ let fc = fm._3
1412+ let fd = fm._4
1413+ let cW = fm._5
1414+ let de = fm._6
1415+ let fe = fm._7
1416+ let dg = fm._8
1417+ let ff = fm._9
1418+ let dI = fm._10
1419+ let fn = fraction((de + cW), aU, ai)
1420+ let fo = if ((k > fn))
14191421 then k
1420- else fm
1421- let dg = fraction(fn, dd, (dd + cV))
1422- let cX = (fn - dg)
1423- let eh = valueOrElse(getInteger(X), 0)
1424- let ff = [eZ, cU(cV, cW, cX)]
1425- let fg = dc(dd, dI.payments, df, dg)
1426- let fh = makeString_2C([dN[D], makeString(fa, "_"), makeString(fb, "_"), makeString_2C(fc, "_")], ":")
1427- let fi = aD(invoke(aA, "updateBackpack", [S, fh], nil))
1428- let fj = aG(invoke(aA, "updateDuckStats", [S, fraction(d, fd, ai)], nil))
1429- $Tuple2(((ff ++ fg) :+ IntegerEntry(X, (eh + fn))), $Tuple5(dL, fe, fi, fj, dH))
1422+ else fn
1423+ let dh = fraction(fo, de, (de + cW))
1424+ let cY = (fo - dh)
1425+ let ei = valueOrElse(getInteger(X), 0)
1426+ let fg = [fa, cV(cW, cX, cY)]
1427+ let fh = dd(de, dJ.payments, dg, dh)
1428+ let fi = makeString_2C([dO[D], makeString(fb, "_"), makeString(fc, "_"), makeString_2C(fd, "_")], ":")
1429+ let fj = aE(invoke(aB, "updateBackpack", [S, fi], nil))
1430+ let fk = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fe, aj)], nil))
1431+ $Tuple2(((fg ++ fh) :+ IntegerEntry(X, (ei + fo))), $Tuple5(dM, ff, fj, fk, dI))
14301432 }
14311433
14321434
14331435
1434-@Callable(dI)
1435-func acceptShopOrderLandDelivery (fk,dm,fo) = if (!(aa))
1436+@Callable(dJ)
1437+func acceptShopOrderLandDelivery (fl,dn,fp) = if (!(ab))
14361438 then throw("Delivery feature is turned off!")
14371439 else {
1438- let dL = bC()
1439- let db = dI.originCaller
1440- let cW = toString(db)
1441- let ej = value(assetInfo(fromBase58String(fo)))
1442- if (!(isDefined(getInteger(aA, M(fo)))))
1443- then throw((("NFT " + ej.name) + " is not staked"))
1440+ let dM = bD()
1441+ let dc = dJ.originCaller
1442+ let cX = toString(dc)
1443+ let ek = value(assetInfo(fromBase58String(fp)))
1444+ if (!(isDefined(getInteger(aB, M(fp)))))
1445+ then throw((("NFT " + ek.name) + " is not staked"))
14441446 else {
1445- let ek = valueOrErrorMessage(getString(aA, K(fo)), (("NFT " + ej.name) + " is orphaned"))
1446- if ((ek != cW))
1447+ let el = valueOrErrorMessage(getString(aB, K(fp)), (("NFT " + ek.name) + " is orphaned"))
1448+ if ((el != cX))
14471449 then throw((e + " is not yours"))
14481450 else {
1449- let dw = aD(invoke(aA, "getWarehouseREADONLY", [fo], nil))
1450- let bV = split_4C(dw, ":")
1451- let cH = split(bV[x], "_")
1452- let cO = split(bV[y], "_")
1453- let eA = if ((bV[z] == ""))
1451+ let dx = aE(invoke(aB, "getWarehouseREADONLY", [fp], nil))
1452+ let bW = split_4C(dx, ":")
1453+ let cI = split(bW[x], "_")
1454+ let cP = split(bW[y], "_")
1455+ let eB = if ((bW[z] == ""))
14541456 then nil
1455- else split(bV[z], "_")
1456- let fp = dl(dm, cW, fk, cH, cO, eA)
1457- let eZ = fp._1
1458- let fa = fp._2
1459- let fb = fp._3
1460- let fc = fp._4
1461- let cV = fp._5
1462- let dd = fp._6
1463- let fd = fp._7
1464- let df = fp._8
1465- let fe = fp._9
1466- let dH = fp._10
1467- let fm = fraction((dd + cV), aT, ah)
1468- let fn = if ((k > fm))
1457+ else split(bW[z], "_")
1458+ let fq = dm(dn, cX, fl, cI, cP, eB)
1459+ let fa = fq._1
1460+ let fb = fq._2
1461+ let fc = fq._3
1462+ let fd = fq._4
1463+ let cW = fq._5
1464+ let de = fq._6
1465+ let fe = fq._7
1466+ let dg = fq._8
1467+ let ff = fq._9
1468+ let dI = fq._10
1469+ let fn = fraction((de + cW), aU, ai)
1470+ let fo = if ((k > fn))
14691471 then k
1470- else fm
1471- let dg = fraction(fn, dd, (dd + cV))
1472- let cX = (fn - dg)
1473- let eh = valueOrElse(getInteger(X), 0)
1474- let ff = [eZ, cU(cV, cW, cX)]
1475- let fg = dc(dd, dI.payments, df, dg)
1476- let dE = makeString_2C([bV[w], makeString(fa, "_"), makeString(fb, "_"), makeString(fc, "_"), bV[A]], ":")
1477- let dG = aD(invoke(aA, "saveWarehouse", [dE, fo], nil))
1478- let dV = aG(invoke(aA, "updateAccStats", [cW, fraction(d, fd, ai)], nil))
1479- $Tuple2(((ff ++ fg) :+ IntegerEntry(X, (eh + fn))), $Tuple5(dL, fe, dG, dV, dH))
1472+ else fn
1473+ let dh = fraction(fo, de, (de + cW))
1474+ let cY = (fo - dh)
1475+ let ei = valueOrElse(getInteger(X), 0)
1476+ let fg = [fa, cV(cW, cX, cY)]
1477+ let fh = dd(de, dJ.payments, dg, dh)
1478+ let dF = makeString_2C([bW[w], makeString(fb, "_"), makeString(fc, "_"), makeString(fd, "_"), bW[A]], ":")
1479+ let dH = aE(invoke(aB, "saveWarehouse", [dF, fp], nil))
1480+ let dW = aH(invoke(aB, "updateAccStats", [cX, fraction(d, fe, aj)], nil))
1481+ $Tuple2(((fg ++ fh) :+ IntegerEntry(X, (ei + fo))), $Tuple5(dM, ff, dH, dW, dI))
14801482 }
14811483 }
14821484 }
14831485
14841486
14851487
1486-@Callable(dI)
1487-func sellProductsToES (cJ) = {
1488- let dL = bC()
1489- if ((size(dI.payments) != 0))
1488+@Callable(dJ)
1489+func sellProductsToES (cK) = {
1490+ let dM = bD()
1491+ if ((size(dJ.payments) != 0))
14901492 then throw("No payments needed")
14911493 else {
1492- let S = valueOrErrorMessage(getString(aA, P(toString(dI.caller))), "You don't have a duck staked")
1493- let dM = split(valueOrElse(getString(aA, T(S)), g), "_")
1494- if ((dM[I] != "A"))
1495- then throw(("Duck location type should be Airport, but is " + dM[I]))
1494+ let S = valueOrErrorMessage(getString(aB, P(toString(dJ.caller))), "You don't have a duck staked")
1495+ let dN = split(valueOrElse(getString(aB, T(S)), g), "_")
1496+ if ((dN[I] != "A"))
1497+ then throw(("Duck location type should be Airport, but is " + dN[I]))
14961498 else {
1497- let dN = bz(R(S))
1498- let eA = if ((dN[G] == ""))
1499+ let dO = bA(R(S))
1500+ let eB = if ((dO[G] == ""))
14991501 then nil
1500- else split_4C(dN[G], "_")
1501- let fq = W()
1502- let fr = getString(fq)
1503- let fs = if (isDefined(fr))
1504- then split_4C(value(fr), "_")
1502+ else split_4C(dO[G], "_")
1503+ let fr = W()
1504+ let fs = getString(fr)
1505+ let ft = if (isDefined(fs))
1506+ then split_4C(value(fs), "_")
15051507 else nil
1506- func ft (bE,fu) = {
1507- let bG = bE._1
1508- let ew = if ((size(cJ) > bG))
1509- then cJ[bG]
1508+ func fu (bF,fv) = {
1509+ let bH = bF._1
1510+ let ex = if ((size(cK) > bH))
1511+ then cK[bH]
15101512 else 0
1511- if ((0 > ew))
1513+ if ((0 > ex))
15121514 then throw("Quantity cannot be negative")
15131515 else {
1514- let Z = split(fu, "_")
1515- if ((size(Z) != u))
1516- then throw(("Fatal: unknown recipe: " + fu))
1516+ let aa = split(fv, "_")
1517+ if ((size(aa) != u))
1518+ then throw(("Fatal: unknown recipe: " + fv))
15171519 else {
1518- let fv = (i * v)
1519- let fw = if ((size(fs) > bG))
1520- then parseIntValue(fs[bG])
1520+ let fw = (i * v)
1521+ let fx = if ((size(ft) > bH))
1522+ then parseIntValue(ft[bH])
15211523 else 0
1522- let fx = (fv - fw)
1523- if ((ew > fx))
1524- then throw(((("Warehouse can buy only " + toString(fx)) + " of ") + o[bG]))
1524+ let fy = (fw - fx)
1525+ if ((ex > fy))
1526+ then throw(((("Warehouse can buy only " + toString(fy)) + " of ") + o[bH]))
15251527 else {
1526- let eo = Y(Z)
1527- let fy = fraction((eo * j), h, (ai * v))
1528- let fz = if ((size(eA) > bG))
1529- then parseIntValue(eA[bG])
1528+ let ep = Z(aa)
1529+ let fz = fraction((ep * j), h, (aj * v))
1530+ let fA = if ((size(eB) > bH))
1531+ then parseIntValue(eB[bH])
15301532 else 0
1531- if ((ew > fz))
1532- then throw(((("You have only " + toString(fz)) + " of ") + o[bG]))
1533- else $Tuple5((bG + 1), (bE._2 + (fy * ew)), (bE._3 :+ toString((fz - ew))), (bE._4 :+ toString((fw + ew))), (bE._5 + (eo * ew)))
1533+ if ((ex > fA))
1534+ then throw(((("You have only " + toString(fA)) + " of ") + o[bH]))
1535+ else $Tuple5((bH + 1), (bF._2 + (fz * ex)), (bF._3 :+ toString((fA - ex))), (bF._4 :+ toString((fx + ex))), (bF._5 + (ep * ex)))
15341536 }
15351537 }
15361538 }
15371539 }
15381540
1539- let eJ = {
1540- let ci = r
1541- let cj = size(ci)
1542- let ck = $Tuple5(0, 0, nil, nil, 0)
1543- func cl (cm,cn) = if ((cn >= cj))
1544- then cm
1545- else ft(cm, ci[cn])
1541+ let eK = {
1542+ let cj = r
1543+ let ck = size(cj)
1544+ let cl = $Tuple5(0, 0, nil, nil, 0)
1545+ func cm (cn,co) = if ((co >= ck))
1546+ then cn
1547+ else fu(cn, cj[co])
15461548
1547- func co (cm,cn) = if ((cn >= cj))
1548- then cm
1549+ func cp (cn,co) = if ((co >= ck))
1550+ then cn
15491551 else throw("List size exceeds 50")
15501552
1551- co(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(cl(ck, 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)
1553+ cp(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cm(cl, 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)
15521554 }
1553- let fh = makeString_2C([dN[D], dN[E], dN[F], makeString_2C(eJ._3, "_")], ":")
1554- let fi = aD(invoke(aA, "updateBackpack", [S, fh], nil))
1555- let dV = aG(invoke(aA, "updateDuckStats", [S, fraction(c, eJ._5, (ai * 10))], nil))
1556- $Tuple2([StringEntry(fq, makeString_2C(eJ._4, "_")), ScriptTransfer(dI.caller, eJ._2, ac)], $Tuple3(fi, dL, dV))
1555+ let fi = makeString_2C([dO[D], dO[E], dO[F], makeString_2C(eK._3, "_")], ":")
1556+ let fj = aE(invoke(aB, "updateBackpack", [S, fi], nil))
1557+ let dW = aH(invoke(aB, "updateDuckStats", [S, fraction(c, eK._5, (aj * 10))], nil))
1558+ $Tuple2([StringEntry(fr, makeString_2C(eK._4, "_")), ScriptTransfer(dJ.caller, eK._2, ad)], $Tuple3(fj, dM, dW))
15571559 }
15581560 }
15591561 }
15601562
15611563
15621564
1563-@Callable(dI)
1564-func updateEsStorage (fA) = if ((dI.caller != aA))
1565+@Callable(dJ)
1566+func updateEsStorage (fB) = if ((dJ.caller != aB))
15651567 then throw("Permission denied")
1566- else $Tuple2([StringEntry(W(), fA)], fA)
1568+ else $Tuple2([StringEntry(W(), fB)], fB)
1569+
1570+
1571+
1572+@Callable(dJ)
1573+func updateDeliveryLocked (fC) = if ((dJ.caller != aB))
1574+ then throw("Permission denied")
1575+ else $Tuple2([IntegerEntry(Y, fC)], fC)
1576+
1577+
1578+
1579+@Callable(dJ)
1580+func sendDeliveryReward (O) = if ((dJ.caller != aB))
1581+ then throw("Permission denied")
1582+ else {
1583+ let ei = valueOrElse(getInteger(X), 0)
1584+ let fD = valueOrElse(getInteger(Y), 0)
1585+ $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (ei - k)), IntegerEntry(Y, (fD - k))], k)
1586+ }
15671587
15681588

github/deemru/w8io/c3f4982 
860.41 ms