tx · DvVvyG9sqjPTU9da2MW29vLvDsT3PB8anjZd2Xqp6TnB

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.05700000 Waves

2023.09.30 16:12 [2778197] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "DvVvyG9sqjPTU9da2MW29vLvDsT3PB8anjZd2Xqp6TnB", "fee": 5700000, "feeAssetId": null, "timestamp": 1696079573949, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "3ujjDauWg18T277tswwJwgGtmvoCvvbZkuVo59n3TYwQyP7RTt6FqAZcyutTUVxE4K2Fbvy6aGbUb2hUeuSpPBtH" ], "script": "base64:BgKGAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESAwoBARIFCgMREQgSBgoEEREICBIECgIRERIFCgMREQgSBgoEEREICBIDCgEREgMKARESBAoCEQgSBAoCAQESBAoCCAgSBQoDCAgIEgQKAggIEgUKAwgICBIDCgEREgMKAQgSAwoBARIDCgEIZgAHeHBUcmFkZQCQTgAHeHBDcmFmdACQTgAKeHBTZWxsVG9FcwCQTgAGeHBTaG9wAJBOAApMQU5EUFJFRklYAgRMQU5EAAZOVU1SRVMABgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAoACUVTQlVZQ09FRgAEABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQD4yQQACHJlc1R5cGVzCQDMCAICA09pbAkAzAgCAgNPcmUJAMwIAgIEV29vZAkAzAgCAgRTYW5kCQDMCAICBENsYXkJAMwIAgIHT3JnYW5pYwUDbmlsAAhtYXRUeXBlcwkAzAgCAgRGdWVsCQDMCAICBU1ldGFsCQDMCAICBVBsYW5rCQDMCAICBUdsYXNzCQDMCAICB1BsYXN0aWMJAMwIAgIHUHJvdGVpbgUDbmlsAAlwcm9kVHlwZXMJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMQkAzAgCAhBGaXJzdCBBaWQgS2l0IEwyCQDMCAICEEZpcnN0IEFpZCBLaXQgTDMJAMwIAgILQmFja3BhY2sgTDEJAMwIAgILQmFja3BhY2sgTDIJAMwIAgILQmFja3BhY2sgTDMJAMwIAgIORm9vZCBSYXRpb24gTDEJAMwIAgIORm9vZCBSYXRpb24gTDIJAMwIAgIORm9vZCBSYXRpb24gTDMJAMwIAgILSmV0IFBhY2sgTDEJAMwIAgILSmV0IFBhY2sgTDIJAMwIAgILSmV0IFBhY2sgTDMJAMwIAgIJU2hpZWxkIEwxCQDMCAICCVNoaWVsZCBMMgkAzAgCAglTaGllbGQgTDMJAMwIAgIHTWluZSBMMQkAzAgCAgdNaW5lIEwyCQDMCAICB01pbmUgTDMJAMwIAgIHVHJhcCBMMQkAzAgCAgdUcmFwIEwyCQDMCAICB1RyYXAgTDMFA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsAAlDT0VGRjJNQVQAgK3iBAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICJThfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF8yMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKjRfMTNfMjJfNF8zNV8yMl8yM18wXzUwLDEsMF8wLDAsMCwwLDAsMCwwXwkAzAgCAio0XzEzXzIyXzRfMzVfMjJfNDZfMF81MCwxLDFfMCwyLDUsMCwwLDAsMF8JAMwIAgIrNF8xM18yMl80XzM1XzIyXzY5XzBfNTAsMiwxXzAsNSwxMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfMjBfMV8zMCwxLDFfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzQwXzFfMzAsMSwyXzIsMSwzLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV82MF8xXzMwLDEsM181LDIsOCwwLDAsMCwwXwUDbmlsAAlySWR4Q29lZmYABgANcklkeENvbnRpbmVudAAHAApSRUNJUEVTSVpFAAsADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgNub18FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgIDc3RfBQdhc3NldElkAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEOa2V5T3JkZXJCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICCmxhbmRPcmRlcl8FC2xhbmRBc3NldElkAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9kZWxpdmVyeUZ1bmRLZXkCDGRlbGl2ZXJ5RnVuZAARZGVsaXZlcnlMb2NrZWRLZXkCDmRlbGl2ZXJ5TG9ja2VkARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgUJQ09FRkYyTUFUABFLU19BTExPV19ERUxJVkVSWQYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDUAoI0GAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABk1VTFQxMACAyK+gJQAOTUlOU0hPUFBBWU1FTlQAoI0GAAVJVEVSNgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQAUSWR4Q2ZnSW52ZXN0RnVuZERhcHAABgAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAEmludmVzdEZ1bmRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0ludmVzdEZ1bmREYXBwAA1hY3Jlc0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUPSWR4Q2ZnQWNyZXNEYXBwAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0ABNGQUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlAA5TRUxMTVVMVElQTElFUgDIAQANQlVZTVVMVElQTElFUgCsAgAKQVVDVElPTkZFRQCQTgAMREVMSVZFUllfRkVFAJBOAA5ERUxJVkVSWV9GRUUxNQCYdQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAglmYWN0b3J5SWQHcmVzVHlwZQkArAICCQCsAgIJAKwCAgIbZmFjdG9yeVdoQnlDb250aW5lbnRBbmRSZXNfBQlmYWN0b3J5SWQCAV8JAKQDAQUHcmVzVHlwZQAJb3JkSWR4UmVzAAAACW9yZElkeE1hdAABAApvcmRJZHhQcm9kAAIBCGdldE9yZGVyAQZvcmRLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZvcmRLZXkCMDBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOjBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOgIBOgkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeFJlcwIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhNYXQCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIJAJEDAgUBcAUKb3JkSWR4UHJvZAUDbmlsAQh0b1ZvbHVtZQMGYW1vdW50B3BrZ1NpemUJaXNQcm9kdWN0AwUJaXNQcm9kdWN0BARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgFBmFtb3VudAEMc2VsbEludGVybmFsBAVsb2NJZAdyZXNUeXBlBmFtb3VudAhtaW5QcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHcmVzVHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCcjADCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UAAAMJAGYCCQBkAgUCdzAFBmFtb3VudAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAZQIFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFAncwBQZhbW91bnQEDHVzZHRSZWNlaXZlZAkAZAIJAGsDBQJyMAkAZQIJAGgCBQ5TRUxMTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGQCCQBoAgBkBQJ3MAkAaAIAMgUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMJAGUCBQZhbW91bnQFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQFbWluOTkJAGUCBQhtaW5QcmljZQkAaQIFCG1pblByaWNlAGQDCQBmAgkAaAIFBW1pbjk5BQZhbW91bnQJAGgCBQx1c2R0UmVjZWl2ZWQFBU1VTFQ4CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUMdXNkdFJlY2VpdmVkAgMgLyAJAKQDAQUGYW1vdW50Ag4gPCBtaW5QcmljZSA9IAkApAMBBQhtaW5QcmljZQIDLCAoBQVsb2NJZAICLCAJAJEDAgUIcmVzVHlwZXMFB3Jlc1R5cGUCASkJAJQKAgkBDEludGVnZXJFbnRyeQIFBXdoS2V5CQBkAgUCdzAFBmFtb3VudAUMdXNkdFJlY2VpdmVkAQtidXlJbnRlcm5hbAQFbG9jSWQHbWF0VHlwZQZhbW91bnQIbWF4UHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB21hdFR5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAm0xAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFCQCXAwEJAMwIAgUGYW1vdW50CQDMCAIJAGUCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQUDbmlsAAAEAm0wCQCXAwEJAMwIAgUCdzAJAMwIAgkAZQIFBmFtb3VudAUCbTEFA25pbAQBbQkAZAIFAm0wBQJtMQQFdzBtaW4JAJcDAQkAzAgCBQJ3MAkAzAgCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQNuaWwECXVzZHRTcGVudAkAZAIJAGsDBQJtMAkAZQIJAGgCBQ1CVVlNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZQIJAGgCAGQFBXcwbWluCQBoAgAyBQJtMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwUCbTEJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAZtYXgxMDEJAGQCBQhtYXhQcmljZQkAaQIFCG1heFByaWNlAGQDCQBmAgkAaAIFCXVzZHRTcGVudAUFTVVMVDgJAGgCBQZtYXgxMDEFAW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQl1c2R0U3BlbnQCAyAvIAkApAMBBQFtAg4gPiBtYXhQcmljZSA9IAkApAMBBQhtYXhQcmljZQIDLCAoBQVsb2NJZAICLCAJAJEDAgUIbWF0VHlwZXMFB21hdFR5cGUCASkJAJUKAwkBDEludGVnZXJFbnRyeQIFBXdoS2V5CQBlAgUCdzAFAW0FCXVzZHRTcGVudAUBbQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC8CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsAQxjaGVja0Jsb2NrZWQAAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ9zdGFraW5nQ29udHJhY3QJAQprZXlCbG9ja2VkAAcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBQR1bml0AQZwcm9sb2cACQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIKc2F2ZUxhc3RUeAUDbmlsBQNuaWwBCXNldENvbW1vbgIDYWNjD2lnbm9yZWRJdGVyYXRvcgQBaggFA2FjYwJfMQQEaXRlbQMJAGYCCQCQAwEIBQNhY2MDXzEwBQFqCQCRAwIIBQNhY2MDXzEwBQFqAgMwQDAEBmlzUHJvZAgFA2FjYwJfOAQJaXRlbVBhcnRzCQC1CQIFBGl0ZW0CAUADCQECIT0CCQCQAwEFCWl0ZW1QYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQIbmV3T3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlpdGVtUGFydHMAAAQIbmV3T3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlpdGVtUGFydHMAAQQJbmV3T3JkVXNkAwUGaXNQcm9kCQBoAgUIbmV3T3JkQW0FCG5ld09yZFByCQBrAwUIbmV3T3JkQW0FCG5ld09yZFByBQVNVUxUOAQJbmV3T3JkVm9sCQEIdG9Wb2x1bWUDBQhuZXdPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfNgUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzYFAWoAAAQLY3VyT3JkUGFydHMJALUJAgMJAGYCCQCQAwEIBQNhY2MCXzcFAWoJAJEDAggFA2FjYwJfNwUBagIDMEAwAgFABAhjdXJPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAAECGN1ck9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAQMDCQBmAgAABQhjdXJPcmRQcgYJAGYCAAAFCG5ld09yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECWN1ck9yZFVzZAMFBmlzUHJvZAkAaAIFCGN1ck9yZEFtBQhjdXJPcmRQcgkAawMFCGN1ck9yZEFtBQhjdXJPcmRQcgUFTVVMVDgDCQAAAgUIbmV3T3JkQW0AAAMJAGYCBQhjdXJPcmRBbQAACQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQIBQNhY2MCXzMIBQNhY2MCXzQJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkAZAIIBQNhY2MCXzkJAQh0b1ZvbHVtZQMFBndoSW5pdAUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTAJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFCGN1ck9yZEFtCAUDYWNjAl8zCAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAGQCCAUDYWNjAl85CQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQhjdXJPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTADCQBmAgUIbmV3T3JkQW0AAAMJAGYCAAAFCGN1ck9yZEFtCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAgFA2FjYwJfNAkAZAIIBQNhY2MCXzUFCW5ld09yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQhjdXJPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTAJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAgFA2FjYwJfNAkAZQIJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDBQZ3aEluaXQFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIAAAUIY3VyT3JkQW0EBmFtRGlmZgkAZQIFCGN1ck9yZEFtBQhuZXdPcmRBbQMJAGYCAAAJAGUCBQZ3aEluaXQFBmFtRGlmZgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBBQZhbURpZmYCGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUGYW1EaWZmCAUDYWNjAl8zCQBlAggFA2FjYwJfNAUJbmV3T3JkVm9sCAUDYWNjAl81CAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMJAGUCBQZ3aEluaXQFBmFtRGlmZgUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTADCQBmAgAACQBkAgUGd2hJbml0BQhuZXdPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFCG5ld09yZEFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQZ3aEluaXQFCG5ld09yZEFtCAUDYWNjAl8zCQBlAggFA2FjYwJfNAUJbmV3T3JkVm9sCQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMJAGQCBQZ3aEluaXQFCG5ld09yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAELc2V0SW50ZXJuYWwDCWN1cnJlbnRXaApjdXJyZW50T3JkBm5ld09yZAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA1jdXJyZW50T3JkUmVzCQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4UmVzAgFfBA1jdXJyZW50T3JkTWF0CQC1CQIJAJEDAgUKY3VycmVudE9yZAUJb3JkSWR4TWF0AgFfBA5jdXJyZW50T3JkUHJvZAMJAAACCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIBXwMJAQIhPQIJAJADAQUGbmV3T3JkAAMJAAIBAjNuZXdPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUGbmV3T3JkAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUGbmV3T3JkAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFBm5ld09yZAACAgAFA25pbAkAvAkCCQCRAwIFBm5ld09yZAACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQBcgoAAiRsBQhyZXNUeXBlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgAABQNuaWwAAAAAAAAFCWN1cnJXaFJlcwUNY3VycmVudE9yZFJlcwcAAAUIcmVzUGFydHMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXNldENvbW1v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AS0BBQd3aE9yZEFtCQCfCg0JAM0IAggFA2FjYwJfMQkApAMBBQZ3aEluaXQJAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zCQCkAwEJAGQCBQZicEluaXQFB2JwT3JkQW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAgFA2FjYwJfNQkAZAIIBQNhY2MCXzYFCGJwT3JkVXNkCQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEFBmlzUHJvZAkAZAIIBQNhY2MDXzEzAwUGaXNQcm9kCQBoAgUHYnBPcmRBbQUFTVVMVDgFB2JwT3JkQW0JAAIBCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCRAwIIBQNhY2MDXzExBQFqAiAgd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3Qgc2VsbCBpdAMJAGYCBQd3aE9yZEFtAAADCQBmAgkBAS0BBQdicE9yZEFtBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhosIGJ1dCB3YXJlaG91c2Ugb25seSBidXlzIAkApAMBBQd3aE9yZEFtAwkAZgIJAQEtAQUHYnBPcmRBbQUGYnBJbml0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAhQsIGJ1dCB5b3Ugb25seSBoYXZlIAkApAMBBQZicEluaXQCBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoJAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQZ3aEluaXQFB2JwT3JkQW0JAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zCQCkAwEJAGQCBQZicEluaXQFB2JwT3JkQW0JAGUCCAUDYWNjAl80BQhkZWx0YVZvbAkAZQIIBQNhY2MCXzUFCGJwT3JkVXNkCAUDYWNjAl82CQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEFBmlzUHJvZAkAZQIIBQNhY2MDXzEzAwUGaXNQcm9kCQBoAgUHYnBPcmRBbQUFTVVMVDgFB2JwT3JkQW0JAAIBCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkAkQMCCAUDYWNjA18xMQUBagIfIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IGJ1eSBpdAETc2VsbFJlc291cmNlc0NvbW1vbgQHcmVzTGlzdAxmYWN0b3J5TG9jSWQHYW1vdW50cwltaW5QcmljZXMKAQVhZGRlcgIDYWNjAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAJEDAgUHcmVzTGlzdAUBagIEIG9mIAkAkQMCBQhyZXNUeXBlcwUBagIULCBidXQgdHJpZWQgdG8gc2VsbCAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIAAAkAkQMCBQdhbW91bnRzBQFqCQACAQkArAICCQCsAgIJAKwCAgIlWW91IHRyaWVkIHRvIHNlbGwgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhyZXNUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQEMc2VsbEludGVybmFsBAUMZmFjdG9yeUxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWluUHJpY2VzBQFqCQCWCgQJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAJEDAgUHYW1vdW50cwUBagkAZAIIBQNhY2MCXzMIBQFiAl8yCQBkAggFA2FjYwJfNAkAkQMCBQdhbW91bnRzBQFqCQCWCgQIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdy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AQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEHNob3AydXNlckFjdGlvbnMDDXVzZFdoMkJwU2FsZG8KY2FsbGVyQWRkcgtyZWNlaXZlZEZlZQMJAGYCBQ11c2RXaDJCcFNhbGRvAAAEC3VzZFdoMkJwRmVlCQBrAwUNdXNkV2gyQnBTYWxkbwUKQVVDVElPTkZFRQUFTVVMVDYDCQBnAgULcmVjZWl2ZWRGZWUJAGUCBQ11c2RXaDJCcFNhbGRvCQBoAgADBQt1c2RXaDJCcEZlZQkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQtyZWNlaXZlZEZlZQAGBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCmNhbGxlckFkZHIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkEBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUKY2FsbGVyQWRkcgkAzQgCCQDNCAIDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZQIJAGUCBQ11c2RXaDJCcFNhbGRvCQBoAgADBQt1c2RXaDJCcEZlZQULcmVjZWl2ZWRGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAUDbmlsARB1c2VyMnNob3BBY3Rpb25zBA11c2RCcDJXaFNhbGRvBHBtdHMNc2hvcExhbmRPd25lcghzcGVudEZlZQMJAGYCBQ11c2RCcDJXaFNhbGRvAAADCQECIT0CCQCQAwEFBHBtdHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCBQRwbXRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQ11c2RCcDJXaFNhbGRvBQhzcGVudEZlZQMJAQIhPQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFDXVzZEJwMldoU2FsZG8ABgIBKwkBCmZpeGVkUG9pbnQCBQhzcGVudEZlZQAGAg4oZGVsaXZlcnkgZmVlKQMJAGYCBQ5NSU5TSE9QUEFZTUVOVAUNdXNkQnAyV2hTYWxkbwkAAgEJAKwCAgISTWluIHNob3AgdHJhZGUgaXMgCQEKZml4ZWRQb2ludAIFDk1JTlNIT1BQQVlNRU5UAAYEC3VzZEJwMldoRmVlCQBrAwUNdXNkQnAyV2hTYWxkbwUKQVVDVElPTkZFRQUFTVVMVDYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUNc2hvcExhbmRPd25lcgQFcmVmQnkJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhyZWZCeUtleQkAzQgCCQDNCAIDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDXNob3BMYW5kT3duZXIJAGUCBQ11c2RCcDJXaFNhbGRvCQBoAgADBQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkAwkBAiE9AgkAkAMBBQRwbXRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQFA25pbAEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBg9zaG9wTGFuZEFzc2V0SWQKY2FsbGVyQWRkcgpicE9yZGVyU3RyCWJwUmVzTGlzdAlicE1hdExpc3QKYnBQcm9kTGlzdAQJbGFuZEFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUPc2hvcExhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUPc2hvcExhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEDXNob3BMYW5kT3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ9zaG9wTGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAAACBQ1zaG9wTGFuZE93bmVyBQpjYWxsZXJBZGRyCQACAQIeWW91IGNhbm5vdCB0cmFkZSB3aXRoIHlvdXJzZWxmBAxicE9yZGVyUGFydHMJALwJAgUKYnBPcmRlclN0cgIBOgMJAQIhPQIJAJADAQUMYnBPcmRlclBhcnRzAAMJAAIBAjJicE9yZGVyU3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIYnBPcmRSZXMJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAAIBXwQIYnBPcmRNYXQJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAQIBXwQJYnBPcmRQcm9kAwkAAAIJAJEDAgUMYnBPcmRlclBhcnRzAAICAAUDbmlsCQC8CQIJAJEDAgUMYnBPcmRlclBhcnRzAAICAV8DCQECIT0CCQCQAwEFCGJwT3JkUmVzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIYnBPcmRNYXQFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFD3Nob3BMYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQGb3JkS2V5CQEOa2V5T3JkZXJCeUxhbmQBBQ9zaG9wTGFuZEFzc2V0SWQEBXdoT3JkCQEIZ2V0T3JkZXIBBQZvcmRLZXkECHdoT3JkUmVzCQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeFJlcwIBXwQId2hPcmRNYXQJALUJAgkAkQMCBQV3aE9yZAUJb3JkSWR4TWF0AgFfBAl3aE9yZFByb2QDCQAAAgkAkQMCBQV3aE9yZAUKb3JkSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQV3aE9yZAUKb3JkSWR4UHJvZAIBXwQBcgoAAiRsBQhicE9yZFJlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ8KDQUDbmlsBQNuaWwFA25pbAAAAAAAAAAABQlicFJlc0xpc3QFCWN1cnJXaFJlcwUId2hPcmRSZXMFCHJlc1R5cGVzBwAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhY2NlcHRDb21tb24CBQIkYQkAkQMCBQIkbAUC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ZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFD3Nob3BMYW5kQXNzZXRJZAUDbmlsBQNuaWwEDmFjY1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUNc2hvcExhbmRPd25lcgkAzAgCCQBrAwUGeHBTaG9wCAUBcANfMTMFBU1VTFQ4BQNuaWwFA25pbAkAnAoKCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld1doT3JkU3RyCAUBcgJfMwgFAW0CXzMIBQFwAl8zCAUBcAJfNQgFAXACXzYIBQFwA18xMwUNc2hvcExhbmRPd25lcgUGd2hTYXZlBQ5hY2NTdGF0c1Jlc3VsdAEac2VsbFJlc291cmNlc1dvcmxkSW50ZXJuYWwBBmFtb3VudAQGb25lUmVzCQBpAgUGYW1vdW50AB4EEW9uZUZhY3RvcnlBbW91bnRzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzBQNuaWwEAXMJAKQDAQUGb25lUmVzBAdyZXNMaXN0CQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzBQNuaWwECW1pblByaWNlcwkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAUDbmlsCgEKb25lRmFjdG9yeQIDYWNjCWNvbnRpbmVudAQBeAkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0BQljb250aW5lbnQFEW9uZUZhY3RvcnlBbW91bnRzBQltaW5QcmljZXMJAJUKAwkAzggCCAUDYWNjAl8xCAUBeAJfMQkAZAIIBQNhY2MCXzIIBQF4Al8zCQBkAggFA2FjYwJfMwgFAXgCXzQEDSR0MDI1MjYxMjUzNTEKAAIkbAUKY29udGluZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKb25lRmFjdG9yeQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMjUyNjEyNTM1MQJfMQQMdXNkdFJlY2VpdmVkCAUNJHQwMjUyNjEyNTM1MQJfMgQIdG90YWxSZXMIBQ0kdDAyNTI2MTI1MzUxAl8zBANmZWUJAGsDBQx1c2R0UmVjZWl2ZWQFDERFTElWRVJZX0ZFRQUFTVVMVDYEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQx1c2R0UmVjZWl2ZWQAZAQIdXNkdExlZnQJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUJAJcKBQUOZmFjdG9yeUFjdGlvbnMFCHVzZHRMZWZ0BQNmZWUFEGFjdGl2aXRpZXNBbW91bnQFCHRvdGFsUmVzFgFpARpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQILbGFuZEFzc2V0SWQCd2gECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEJAQ5rZXlPcmRlckJ5TGFuZAEFC2xhbmRBc3NldElkBAF6CQELc2V0SW50ZXJuYWwDBQJ3aAUKY3VycmVudE9yZAUKY3VycmVudE9yZAkAlAoCBQNuaWwJAGQCCAUBegJfNAgFAXoCXzUBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBDXNlbGxSZXNvdXJjZXMCB2Ftb3VudHMJbWluUHJpY2VzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAipzZWxsUmVzb3VyY2VzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA0kdDAyNjgwMzI2OTI5CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBQdhbW91bnRzBQltaW5QcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMjY4MDMyNjkyOQJfMQQGbmV3UmVzCAUNJHQwMjY4MDMyNjkyOQJfMgQMdXNkdFJlY2VpdmVkCAUNJHQwMjY4MDMyNjkyOQJfMwQIdG90YWxSZXMIBQ0kdDAyNjgwMzI2OTI5Al80BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQEB25ld1BhY2sJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQESc2VsbFJlc291cmNlc1dvcmxkAgRhZGRyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUNYWNyZXNDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA0kdDAyNzcyMTI3ODc4CQEac2VsbFJlc291cmNlc1dvcmxkSW50ZXJuYWwBBQZhbW91bnQEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMjc3MjEyNzg3OAJfMQQIdXNkdExlZnQIBQ0kdDAyNzcyMTI3ODc4Al8yBANmZWUIBQ0kdDAyNzcyMTI3ODc4Al8zBBBhY3Rpdml0aWVzQW1vdW50CAUNJHQwMjc3MjEyNzg3OAJfNAQIdG90YWxSZXMIBQ0kdDAyNzcyMTI3ODc4Al81AwkAZwIAAAUIdXNkdExlZnQJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgUDZmVlAAYEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM0IAgkAzQgCBQ5mYWN0b3J5QWN0aW9ucwkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAFA2ZlZQkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUSaW52ZXN0RnVuZENvbnRyYWN0BQh1c2R0TGVmdAULdXNkdEFzc2V0SWQJAJQKAgUIdXNkdExlZnQFC3N0YXRzUmVzdWx0AWkBGnNlbGxSZXNvdXJjZXNXb3JsZFJFQURPTkxZAQZhbW91bnQECHVzZHRMZWZ0CAkBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQUGYW1vdW50Al8yCQCUCgIFA25pbAUIdXNkdExlZnQBaQEZc2VsbFJlc291cmNlc0R1Y2tEZWxpdmVyeQMHYW1vdW50cwltaW5QcmljZXMQZmFjdG9yeUNvbnRpbmVudAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAipzZWxsUmVzb3VyY2VzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMjkxMTEyOTIzMgkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltaW5QcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMjkxMTEyOTIzMgJfMQQGbmV3UmVzCAUNJHQwMjkxMTEyOTIzMgJfMgQMdXNkdFJlY2VpdmVkCAUNJHQwMjkxMTEyOTIzMgJfMwQIdG90YWxSZXMIBQ0kdDAyOTExMTI5MjMyAl80BAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQx1c2R0UmVjZWl2ZWQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkAwkAZwIFA2ZlZQkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQNmZWUABgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEZc2VsbFJlc291cmNlc0xhbmREZWxpdmVyeQQHYW1vdW50cwltaW5QcmljZXMLbGFuZEFzc2V0SWQQZmFjdG9yeUNvbnRpbmVudAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDMxMjU5MzEzODAJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDMxMjU5MzEzODACXzEEBm5ld1JlcwgFDSR0MDMxMjU5MzEzODACXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDMxMjU5MzEzODACXzMECHRvdGFsUmVzCAUNJHQwMzEyNTkzMTM4MAJfNAQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbFJlcwUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQx1c2R0UmVjZWl2ZWQAZAMJAGcCBQNmZWUJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgUDZmVlAAYECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCBQ5mYWN0b3J5QWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlBQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpAQxidXlNYXRlcmlhbHMCB2Ftb3VudHMJbWF4UHJpY2VzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDSR0MDMzMjQwMzMzNjIJARJidXlNYXRlcmlhbHNDb21tb24EBQdtYXRMaXN0CQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAUHYW1vdW50cwUJbWF4UHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDMzMjQwMzMzNjICXzEEBm5ld01hdAgFDSR0MDMzMjQwMzMzNjICXzIECXVzZHRTcGVudAgFDSR0MDMzMjQwMzMzNjICXzMECHRvdGFsTWF0CAUNJHQwMzMyNDAzMzM2MgJfNAMJAGYCBQl1c2R0U3BlbnQFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10BQl1c2R0U3BlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFCXVzZHRTcGVudAULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbE1hdAUFTVVMVDgFA25pbAUDbmlsCQCUCgIJAM0IAgkAzggCBQ5mYWN0b3J5QWN0aW9ucwUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpARhidXlNYXRlcmlhbHNEdWNrRGVsaXZlcnkDB2Ftb3VudHMJbWF4UHJpY2VzEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwMzQ4ODAzNDk5NwkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzNDg4MDM0OTk3Al8xBAZuZXdNYXQIBQ0kdDAzNDg4MDM0OTk3Al8yBAl1c2R0U3BlbnQIBQ0kdDAzNDg4MDM0OTk3Al8zBAh0b3RhbE1hdAgFDSR0MDM0ODgwMzQ5OTcCXzQEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFCXVzZHRTcGVudAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUJdXNkdFNwZW50BQNmZWUDCQBmAgUQdXNkdFNwZW50V2l0aEZlZQUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYCASsJAQpmaXhlZFBvaW50AgUDZmVlAAYCDihkZWxpdmVyeSBmZWUpBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM4IAgUOZmFjdG9yeUFjdGlvbnMFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpARhidXlNYXRlcmlhbHNMYW5kRGVsaXZlcnkEB2Ftb3VudHMJbWF4UHJpY2VzC2xhbmRBc3NldElkEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHbWF0TGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8EDSR0MDM3Mjc1MzczOTIJARJidXlNYXRlcmlhbHNDb21tb24EBQdtYXRMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzcyNzUzNzM5MgJfMQQGbmV3TWF0CAUNJHQwMzcyNzUzNzM5MgJfMgQJdXNkdFNwZW50CAUNJHQwMzcyNzUzNzM5MgJfMwQIdG90YWxNYXQIBQ0kdDAzNzI3NTM3MzkyAl80BAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQl1c2R0U3BlbnQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBEWV4Y2hhbmdlUmVzb3VyY2VzAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDSR0MDM5NTA2Mzk2MTIJARdleGNoYW5nZVJlc291cmNlc0NvbW1vbgMFB3Jlc0xpc3QFB21hdExpc3QFB2Ftb3VudHMEBm5ld1JlcwgFDSR0MDM5NTA2Mzk2MTICXzEEBm5ld01hdAgFDSR0MDM5NTA2Mzk2MTICXzIECXVzZHRTcGVudAgFDSR0MDM5NTA2Mzk2MTICXzMEFHRvdGFsQW1vdW50Q29udmVydGVkCAUNJHQwMzk1MDYzOTYxMgJfNAMJAGYCBQl1c2R0U3BlbnQFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10BQl1c2R0U3BlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFCXVzZHRTcGVudAULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsCQCUCgIJAM0IAgUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpAR1leGNoYW5nZVJlc291cmNlc0R1Y2tEZWxpdmVyeQEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwNDEwNDc0MTE1MwkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDEwNDc0MTE1MwJfMQQGbmV3TWF0CAUNJHQwNDEwNDc0MTE1MwJfMgQJdXNkdFNwZW50CAUNJHQwNDEwNDc0MTE1MwJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MTA0NzQxMTUzAl80BAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEdZXhjaGFuZ2VSZXNvdXJjZXNMYW5kRGVsaXZlcnkCB2Ftb3VudHMLbGFuZEFzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQNJHQwNDMzNzY0MzQ4MgkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDMzNzY0MzQ4MgJfMQQGbmV3TWF0CAUNJHQwNDMzNzY0MzQ4MgJfMgQJdXNkdFNwZW50CAUNJHQwNDMzNzY0MzQ4MgJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MzM3NjQzNDgyAl80BAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFCXVzZHRTcGVudAUOREVMSVZFUllfRkVFMTUFBU1VTFQ2BANmZWUDCQBmAgUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQFF01JTl9VU0RUX0ZFRV9ERUxJVkVSWTE1BQdmZWVQYXJ0BBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUJdXNkdFNwZW50BQNmZWUDCQBmAgUQdXNkdFNwZW50V2l0aEZlZQUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYCASsJAQpmaXhlZFBvaW50AgUDZmVlAAYCDihkZWxpdmVyeSBmZWUpBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEKY3JhZnRHb29kcwIKcHJvZHVjdElkeAhxdWFudGl0eQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQVNVUxUNgkAAgECKmV4YWN0bHkgMSBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAU0JAAIBCQCsAgICMUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgTWFudWZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBGNvbnQJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUFClJFQ0lQRVNJWkUJAAIBCQCsAgICF0ZhdGFsOiB1bmtub3duIHJlY2lwZTogCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgEDnByb2R1Y3RDb250SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUG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AAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIcHJvZHVjZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAggFBm1lcmdlZAJfMQIBXwkAzAgCCQC6CQIFBmJwUHJvZAIBXwUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwQ3JhZnQIBQZtZXJnZWQCXzIFBU1VTFQ4BQNuaWwFA25pbAkAlAoCBQNuaWwJAJUKAwUGcmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBEXNldFdhcmVob3VzZU9yZGVyAgtuZXdPcmRlclN0cgtsYW5kQXNzZXRJZAQEdXNlcggFAWkMb3JpZ2luQ2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBnJlc3VsdAMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBDGNoZWNrQmxvY2tlZAAHBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMDCQECIT0CBQR1c2VyBQxyZXN0Q29udHJhY3QJAQIhPQIFBW93bmVyBQRhZGRyBwkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQIbmV3T3JkZXIJALwJAgULbmV3T3JkZXJTdHICAToEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQHd2hUb3RhbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFCHZvbFRvdGFsBAZvcmRLZXkJAQ5rZXlPcmRlckJ5TGFuZAEFC2xhbmRBc3NldElkBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBBQZvcmRLZXkEAXoJAQtzZXRJbnRlcm5hbAMFCWN1cnJlbnRXaAUKY3VycmVudE9yZAUIbmV3T3JkZXIEC2J1eVZvbFNhbGRvCAUBegJfNAQMc2VsbFZvbFNhbGRvCAUBegJfNQQKd2hPY2N1cGllZAgFAXoCXzcECHdoTG9ja2VkCQBkAgULYnV5Vm9sU2FsZG8FDHNlbGxWb2xTYWxkbwQGd2hGcmVlCQBlAgkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQFCHdoTG9ja2VkAwkAZgIAAAUGd2hGcmVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITQXR0ZW1wdCB0byByZXNlcnZlIAkApAMBBQtidXlWb2xTYWxkbwIbIHNwYWNlIGZvciBidXkgb3JkZXJzLCBhbmQgCQCkAwEFDHNlbGxWb2xTYWxkbwIlIHNwYWNlIGZvciBzZWxsIG9yZGVycyAoYW5kIG9jY3VwaWVkPQkApAMBBQp3aE9jY3VwaWVkAh8pLCBsZWFkcyB0byBuZWdhdGl2ZSBmcmVlIHNwYWNlBAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCQC5CQIIBQF6Al8xAgFfCQDMCAIJALkJAggFAXoCXzICAV8JAMwIAgkAugkCCAUBegJfMwIBXwkAzAgCCQCkAwEFCHdoTG9ja2VkBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAh1c2RTYWxkbwgFAXoCXzYEB2FjdGlvbnMDCQBmAgUIdXNkU2FsZG8AAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQh1c2RTYWxkbwkAAgEJAKwCAgISUGF5bWVudCBuZWVkZWQgaXMgCQCkAwEFCHVzZFNhbGRvCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3T3JkZXJTdHIFA25pbAMJAAACBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3T3JkZXJTdHIFA25pbAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQVvd25lcgkBAS0BBQh1c2RTYWxkbwULdXNkdEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsCQCUCgIFB2FjdGlvbnMJAJQKAgUGcmVzdWx0BQZ3aFNhdmUBaQEUYWNjZXB0V2FyZWhvdXNlT3JkZXIDCmJwT3JkZXJTdHIPc2hvcExhbmRBc3NldElkC2R1Y2tBc3NldElkBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEEXN0YWtlZER1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBRFzdGFrZWREdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CBRFzdGFrZWREdWNrQXNzZXRJZAULZHVja0Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAhRZb3VyIHN0YWtlZCBkdWNrIGlzIAURc3Rha2VkRHVja0Fzc2V0SWQCDSwgYnV0IHBhc3NlZCAFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDUyOTk0NTMyMzQJARVhY2NlcHRTaG9wT3JkZXJDb21tb24GBQ9zaG9wTGFuZEFzc2V0SWQFCmNhbGxlckFkZHIFCmJwT3JkZXJTdHIFCWJwUmVzTGlzdAUJYnBNYXRMaXN0BQpicFByb2RMaXN0BApzaG9wQWN0aW9uCAUNJHQwNTI5OTQ1MzIzNAJfMQQKbmV3VXNlclJlcwgFDSR0MDUyOTk0NTMyMzQCXzIECm5ld1VzZXJNYXQIBQ0kdDA1Mjk5NDUzMjM0Al8zBAtuZXdVc2VyUHJvZAgFDSR0MDUyOTk0NTMyMzQCXzQEDXVzZFdoMkJwU2FsZG8IBQ0kdDA1Mjk5NDUzMjM0Al81BA11c2RCcDJXaFNhbGRvCAUNJHQwNTI5OTQ1MzIzNAJfNgQIeHBBbW91bnQIBQ0kdDA1Mjk5NDUzMjM0Al83BA1zaG9wTGFuZE93bmVyCAUNJHQwNTI5OTQ1MzIzNAJfOAQKc2hvcFdoU2F2ZQgFDSR0MDUyOTk0NTMyMzQCXzkEDmFjY1N0YXRzUmVzdWx0CAUNJHQwNTI5OTQ1MzIzNANfMTAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgAABAhhY3Rpb25zMgkBEHVzZXIyc2hvcEFjdGlvbnMEBQ11c2RCcDJXaFNhbGRvCAUBaQhwYXltZW50cwUNc2hvcExhbmRPd25lcgAABAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC6CQIFC25ld1VzZXJQcm9kAgFfBQNuaWwCAToEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQPZHVja1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzggCBQhhY3Rpb25zMQUIYWN0aW9uczIJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZicFNhdmUFD2R1Y2tTdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQBaQEbYWNjZXB0U2hvcE9yZGVyRHVja0RlbGl2ZXJ5AghvcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUKY2FsbGVyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECWJwUmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQJYnBNYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBApicFByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA0kdDA1NDY3MzU0OTExCQEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBgUPc2hvcExhbmRBc3NldElkBQpjYWxsZXJBZGRyBQhvcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1NDY3MzU0OTExAl8xBApuZXdVc2VyUmVzCAUNJHQwNTQ2NzM1NDkxMQJfMgQKbmV3VXNlck1hdAgFDSR0MDU0NjczNTQ5MTECXzMEC25ld1VzZXJQcm9kCAUNJHQwNTQ2NzM1NDkxMQJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU0NjczNTQ5MTECXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1NDY3MzU0OTExAl82BAh4cEFtb3VudAgFDSR0MDU0NjczNTQ5MTECXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1NDY3MzU0OTExAl84BApzaG9wV2hTYXZlCAUNJHQwNTQ2NzM1NDkxMQJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1NDY3MzU0OTExA18xMAQPZGVsaXZlcnlGZWVQYXJ0CQBrAwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8FDERFTElWRVJZX0ZFRQUFTVVMVDYEC2RlbGl2ZXJ5RmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFD2RlbGl2ZXJ5RmVlUGFydAQIc3BlbnRGZWUJAGsDBQtkZWxpdmVyeUZlZQUNdXNkQnAyV2hTYWxkbwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8EC3JlY2VpdmVkRmVlCQBlAgULZGVsaXZlcnlGZWUFCHNwZW50RmVlBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgULcmVjZWl2ZWRGZWUECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyBQhzcGVudEZlZQQIbmV3QnBTdHIJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUKbmV3VXNlclJlcwIBXwkAzAgCCQC5CQIFCm5ld1VzZXJNYXQCAV8JAMwIAgkAugkCBQtuZXdVc2VyUHJvZAIBXwUDbmlsAgE6BAZicFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwED2R1Y2tTdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUGeHBTaG9wBQh4cEFtb3VudAUFTVVMVDgFA25pbAUDbmlsCQCUCgIJAM0IAgkAzggCBQhhY3Rpb25zMQUIYWN0aW9uczIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFC2RlbGl2ZXJ5RmVlCQCXCgUFDHByb2xvZ1Jlc3VsdAUKc2hvcFdoU2F2ZQUGYnBTYXZlBQ9kdWNrU3RhdHNSZXN1bHQFDmFjY1N0YXRzUmVzdWx0AWkBG2FjY2VwdFNob3BPcmRlckxhbmREZWxpdmVyeQMIb3JkZXJTdHIPc2hvcExhbmRBc3NldElkDW15TGFuZEFzc2V0SWQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFDW15TGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQ1teUxhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ1teUxhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQpjYWxsZXJBZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFDW15TGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQIcHJvZExpc3QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQNJHQwNTcxNTA1NzM4MgkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUIb3JkZXJTdHIFB3Jlc0xpc3QFB21hdExpc3QFCHByb2RMaXN0BApzaG9wQWN0aW9uCAUNJHQwNTcxNTA1NzM4MgJfMQQKbmV3VXNlclJlcwgFDSR0MDU3MTUwNTczODICXzIECm5ld1VzZXJNYXQIBQ0kdDA1NzE1MDU3MzgyAl8zBAtuZXdVc2VyUHJvZAgFDSR0MDU3MTUwNTczODICXzQEDXVzZFdoMkJwU2FsZG8IBQ0kdDA1NzE1MDU3MzgyAl81BA11c2RCcDJXaFNhbGRvCAUNJHQwNTcxNTA1NzM4MgJfNgQIeHBBbW91bnQIBQ0kdDA1NzE1MDU3MzgyAl83BA1zaG9wTGFuZE93bmVyCAUNJHQwNTcxNTA1NzM4MgJfOAQKc2hvcFdoU2F2ZQgFDSR0MDU3MTUwNTczODICXzkEDmFjY1N0YXRzUmVzdWx0CAUNJHQwNTcxNTA1NzM4MgNfMTAED2RlbGl2ZXJ5RmVlUGFydAkAawMJAGQCBQ11c2RCcDJXaFNhbGRvBQ11c2RXaDJCcFNhbGRvBQxERUxJVkVSWV9GRUUFBU1VTFQ2BAtkZWxpdmVyeUZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFD2RlbGl2ZXJ5RmVlUGFydAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQ9kZWxpdmVyeUZlZVBhcnQECHNwZW50RmVlCQBrAwULZGVsaXZlcnlGZWUFDXVzZEJwMldoU2FsZG8JAGQCBQ11c2RCcDJXaFNhbGRvBQ11c2RXaDJCcFNhbGRvBAtyZWNlaXZlZEZlZQkAZQIFC2RlbGl2ZXJ5RmVlBQhzcGVudEZlZQQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABAhhY3Rpb25zMQkAzAgCBQpzaG9wQWN0aW9uCQEQc2hvcDJ1c2VyQWN0aW9ucwMFDXVzZFdoMkJwU2FsZG8FCmNhbGxlckFkZHIFC3JlY2VpdmVkRmVlBAhhY3Rpb25zMgkBEHVzZXIyc2hvcEFjdGlvbnMEBQ11c2RCcDJXaFNhbGRvCAUBaQhwYXltZW50cwUNc2hvcExhbmRPd25lcgUIc3BlbnRGZWUEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUKbmV3VXNlclJlcwIBXwkAzAgCCQC5CQIFCm5ld1VzZXJNYXQCAV8JAMwIAgkAuQkCBQtuZXdVc2VyUHJvZAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgUNbXlMYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUKY2FsbGVyQWRkcgkAzAgCCQBrAwUGeHBTaG9wBQh4cEFtb3VudAUFTVVMVDgFA25pbAUDbmlsCQCUCgIJAM0IAgkAzggCBQhhY3Rpb25zMQUIYWN0aW9uczIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFC2RlbGl2ZXJ5RmVlCQCXCgUFDHByb2xvZ1Jlc3VsdAUKc2hvcFdoU2F2ZQUGd2hTYXZlBQtzdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQBaQEQc2VsbFByb2R1Y3RzVG9FUwEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFBCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEFpcnBvcnQsIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EBWVzS2V5CQEOa2V5RXNXYXJlaG91c2UABAhleGlzdFN0cgkAoggBBQVlc0tleQQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC8CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwKAQhtb3ZlUHJvZAIDYWNjCXJlY2lwZVN0cgQBaggFA2FjYwJfMQQIcXVhbnRpdHkDCQBmAgkAkAMBBQdhbW91bnRzBQFqCQCRAwIFB2Ftb3VudHMFAWoAAAMJAGYCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAZyZWNpcGUJALUJAgUJcmVjaXBlU3RyAgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUFClJFQ0lQRVNJWkUJAAIBCQCsAgICF0ZhdGFsOiB1bmtub3duIHJlY2lwZTogBQlyZWNpcGVTdHIECW1heEFtb3VudAkAaAIFDUVTTUFYUEFDS0FHRVMFDlBST0RVQ1RQS0dTSVpFBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwUBagAABAZjYW5CdXkJAGUCBQltYXhBbW91bnQFC2V4aXN0QW1vdW50AwkAZgIFCHF1YW50aXR5BQZjYW5CdXkJAAIBCQCsAgIJAKwCAgkArAICAhdXYXJlaG91c2UgY2FuIGJ1eSBvbmx5IAkApAMBBQZjYW5CdXkCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJdW5pdFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQlFU0JVWUNPRUYFEFJFU09VUkNFUFJJQ0VNSU4JAGgCBQVNVUxUOAUOUFJPRFVDVFBLR1NJWkUEDGJwUHJvZEFtb3VudAMJAGYCCQCQAwEFCHByb2RMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAWoAAAMJAGYCBQhxdWFudGl0eQUMYnBQcm9kQW1vdW50CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAKQDAQUMYnBQcm9kQW1vdW50AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBagkAlwoFCQBkAgUBagABCQBkAggFA2FjYwJfMgkAaAIFCXVuaXRQcmljZQUIcXVhbnRpdHkJAM0IAggFA2FjYwJfMwkApAMBCQBlAgUMYnBQcm9kQW1vdW50BQhxdWFudGl0eQkAzQgCCAUDYWNjAl80CQCkAwEJAGQCBQtleGlzdEFtb3VudAUIcXVhbnRpdHkJAGQCCAUDYWNjAl81CQBoAgUIdG90YWxNYXQFCHF1YW50aXR5BAZtZXJnZWQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJcKBQAAAAAFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCG1vdmVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC6CQIIBQZtZXJnZWQCXzMCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUKeHBTZWxsVG9FcwgFBm1lcmdlZAJfNQkAaAIFBU1VTFQ4AAoFA25pbAUDbmlsCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXNLZXkJALoJAggFBm1lcmdlZAJfNAIBXwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIIBQZtZXJnZWQCXzIFC3VzZHRBc3NldElkBQNuaWwJAJUKAwUGYnBTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBD3VwZGF0ZUVzU3RvcmFnZQEKbmV3U3RvcmFnZQMJAQIhPQIIBQFpBmNhbGxlcgUPc3Rha2luZ0NvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5RXNXYXJlaG91c2UABQpuZXdTdG9yYWdlBQNuaWwFCm5ld1N0b3JhZ2UBaQEUdXBkYXRlRGVsaXZlcnlMb2NrZWQBCW5ld0Ftb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUPc3Rha2luZ0NvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkFCW5ld0Ftb3VudAUDbmlsBQluZXdBbW91bnQBaQESc2VuZERlbGl2ZXJ5UmV3YXJkAQRhZGRyAwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRFkZWxpdmVyeUxvY2tlZEtleQAACQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQt1c2R0QXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBlAgUJZnVuZFRvdGFsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkJAMwIAgkBDEludGVnZXJFbnRyeQIFEWRlbGl2ZXJ5TG9ja2VkS2V5CQBlAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkAg40YXg==", "height": 2778197, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 69NH1WWfLS8FraSQvZgE4RXskz6H7ZVhHnKfkqofYkCb Next: AreAx8kG7V8V5i5rwFUViSjZrBAJnypDtxCYXezDVzG1 Diff:
OldNewDifferences
269269 else 0
270270 let bw = min([bo, (bg - bv)])
271271 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)
272+ let by = min([bo, aQ])
273+ let bz = (fraction(bw, ((aS * h) - fraction(((100 * by) - (50 * bw)), h, aQ)), ak) + fraction(bv, (2 * h), aj))
274+ let bA = (bu + (bu / 100))
275+ if (((bz * aj) > (bA * bx)))
276+ then throw((((((((((("Actual price = " + toString(bz)) + " / ") + toString(bx)) + " > maxPrice = ") + toString(bu)) + ", (") + bl) + ", ") + n[bt]) + ")"))
277+ else $Tuple3(IntegerEntry(bn, (bo - bx)), bz, bx)
277278 }
278279
279280
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:"), ":")
281+func bB (bC) = {
282+ let be = split_4C(valueOrElse(getString(aB, bC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
282283 [toString(valueOrElse(parseInt(be[D]), 0)), if ((size(split(be[E], "_")) == f))
283284 then be[E]
284285 else "0_0_0_0_0_0", if ((size(split(be[F], "_")) == f))
287288 }
288289
289290
290-func bC () = if (valueOrElse(getBoolean(aB, aJ()), false))
291+func bD () = if (valueOrElse(getBoolean(aB, aJ()), false))
291292 then throw("Contracts are under maintenance")
292293 else unit
293294
294295
295-func bD () = aH(invoke(aB, "saveLastTx", nil, nil))
296+func bE () = aH(invoke(aB, "saveLastTx", nil, nil))
296297
297298
298-func bE (bF,bG) = {
299- let bH = bF._1
300- let bI = if ((size(bF._10) > bH))
301- then bF._10[bH]
299+func bF (bG,bH) = {
300+ let bI = bG._1
301+ let bJ = if ((size(bG._10) > bI))
302+ then bG._10[bI]
302303 else "0@0"
303- let bJ = bF._8
304- let bK = split(bI, "@")
305- if ((size(bK) != 2))
304+ let bK = bG._8
305+ let bL = split(bJ, "@")
306+ if ((size(bL) != 2))
306307 then throw("Incorrect order format, should be amount@price")
307308 else {
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])
309+ let bM = parseIntValue(bL[0])
310+ let bN = parseIntValue(bL[1])
311+ let bO = if (bK)
312+ then (bM * bN)
313+ else fraction(bM, bN, aj)
314+ let bP = bf(bM, v, bK)
315+ let bQ = if ((size(bG._6) > bI))
316+ then parseIntValue(bG._6[bI])
316317 else 0
317- let bQ = split(if ((size(bF._7) > bH))
318- then bF._7[bH]
318+ let bR = split(if ((size(bG._7) > bI))
319+ then bG._7[bI]
319320 else "0@0", "@")
320- let bR = parseIntValue(bQ[0])
321- let bS = parseIntValue(bQ[1])
322- if (if ((0 > bS))
321+ let bS = parseIntValue(bR[0])
322+ let bT = parseIntValue(bR[1])
323+ if (if ((0 > bT))
323324 then true
324- else (0 > bM))
325+ else (0 > bN))
325326 then throw("Price can't be negative")
326327 else {
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))
328+ let bU = if (bK)
329+ then (bS * bT)
330+ else fraction(bS, bT, aj)
331+ if ((bM == 0))
332+ then if ((bS > 0))
333+ then $Tuple10((bI + 1), (bG._2 :+ toString(bQ)), bG._3, bG._4, (bG._5 - bU), bG._6, bG._7, bK, (bG._9 + bf(bQ, v, bK)), bG._10)
334+ else $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bS))), bG._3, bG._4, bG._5, bG._6, bG._7, bK, (bG._9 + bf((bQ - bS), v, bK)), bG._10)
335+ else if ((bM > 0))
336+ then if ((0 > bS))
337+ then $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bS))), (bG._3 + bP), bG._4, (bG._5 + bO), bG._6, bG._7, bK, bf((bQ - bS), v, bK), bG._10)
338+ else $Tuple10((bI + 1), (bG._2 :+ toString(bQ)), (bG._3 + bP), bG._4, ((bG._5 + bO) - bU), bG._6, bG._7, bK, bf(bQ, v, bK), bG._10)
339+ else if ((0 > bS))
339340 then {
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)
341+ let bV = (bS - bM)
342+ if ((0 > (bQ - bV)))
343+ then throw((((("Attempt to take " + toString(bV)) + " from warehouse, but only ") + toString(bQ)) + " available"))
344+ else $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bV))), bG._3, (bG._4 - bP), bG._5, bG._6, bG._7, bK, bf((bQ - bV), v, bK), bG._10)
344345 }
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)
346+ else if ((0 > (bQ + bM)))
347+ then throw((((("Attempt to take " + toString(-(bM))) + " from warehouse, but only ") + toString(bQ)) + " available"))
348+ else $Tuple10((bI + 1), (bG._2 :+ toString((bQ + bM))), bG._3, (bG._4 - bP), (bG._5 - bU), bG._6, bG._7, bK, bf((bQ + bM), v, bK), bG._10)
348349 }
349350 }
350351 }
351352
352353
353-func bV (bW,bX,bY) = {
354- let bZ = split(bW[x], "_")
355- let ca = split(bW[y], "_")
356- let cb = if ((bW[z] == ""))
354+func bW (bX,bY,bZ) = {
355+ let ca = split(bX[x], "_")
356+ let cb = split(bX[y], "_")
357+ let cc = if ((bX[z] == ""))
357358 then nil
358- else split_4C(bW[z], "_")
359- let cc = split(bX[aZ], "_")
360- let cd = split(bX[ba], "_")
361- let ce = if ((bX[bb] == ""))
359+ else split_4C(bX[z], "_")
360+ let cd = split(bY[aZ], "_")
361+ let ce = split(bY[ba], "_")
362+ let cf = if ((bY[bb] == ""))
362363 then nil
363- else split_4C(bX[bb], "_")
364- if ((size(bY) != 3))
364+ else split_4C(bY[bb], "_")
365+ if ((size(bZ) != 3))
365366 then throw("newOrderStr should contain exactly 2 ':' separators")
366367 else {
367- let cf = split(bY[0], "_")
368- let cg = split(bY[1], "_")
369- let ch = if ((bY[2] == ""))
368+ let cg = split(bZ[0], "_")
369+ let ch = split(bZ[1], "_")
370+ let ci = if ((bZ[2] == ""))
370371 then nil
371- else split_4C(bY[2], "_")
372- if ((size(cf) != f))
372+ else split_4C(bZ[2], "_")
373+ if ((size(cg) != f))
373374 then throw("All 6 resources should be passed")
374- else if ((size(cg) != f))
375+ else if ((size(ch) != f))
375376 then throw("All 6 materials should be passed")
376377 else {
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])
378+ let cj = {
379+ let ck = m
380+ let cl = size(ck)
381+ let cm = $Tuple10(0, nil, 0, 0, 0, ca, cd, false, 0, cg)
382+ func cn (co,cp) = if ((cp >= cl))
383+ then co
384+ else bF(co, ck[cp])
384385
385- func cp (cn,co) = if ((co >= ck))
386- then cn
386+ func cq (co,cp) = if ((cp >= cl))
387+ then co
387388 else throw("List size exceeds 6")
388389
389- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
390+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
390391 }
391392 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])
393+ let ck = n
394+ let cl = size(ck)
395+ let cm = $Tuple10(0, nil, cj._3, cj._4, cj._5, cb, ce, false, cj._9, ch)
396+ func cr (co,cp) = if ((cp >= cl))
397+ then co
398+ else bF(co, ck[cp])
398399
399- func cr (cn,co) = if ((co >= ck))
400- then cn
400+ func cs (co,cp) = if ((cp >= cl))
401+ then co
401402 else throw("List size exceeds 6")
402403
403- cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
404+ cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
404405 }
405406 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])
407+ let ck = o
408+ let cl = size(ck)
409+ let cm = $Tuple10(0, nil, bx._3, bx._4, bx._5, cc, cf, true, bx._9, ci)
410+ func ct (co,cp) = if ((cp >= cl))
411+ then co
412+ else bF(co, ck[cp])
412413
413- func ct (cn,co) = if ((co >= ck))
414- then cn
414+ func cu (co,cp) = if ((cp >= cl))
415+ then co
415416 else throw("List size exceeds 50")
416417
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)
418+ cu(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(cm, 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)
418419 }
419- $Tuple7(ci._2, bx._2, be._2, be._3, be._4, be._5, be._9)
420+ $Tuple7(cj._2, bx._2, be._2, be._3, be._4, be._5, be._9)
420421 }
421422 }
422423 }
423424
424425
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))
426+func cv (bG,cw) = {
427+ let bI = bG._7
428+ let bK = bG._12
429+ let cx = split(cw, "@")
430+ if ((size(cx) != 2))
430431 then throw("Incorrect order format, should be amount@price")
431432 else {
432- let cx = parseIntValue(cw[0])
433- let cy = parseIntValue(cw[1])
434- if ((0 > cy))
433+ let cy = parseIntValue(cx[0])
434+ let cz = parseIntValue(cx[1])
435+ if ((0 > cz))
435436 then throw("Price can't be negative")
436437 else {
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])
438+ let cA = if (bK)
439+ then (cy * cz)
440+ else fraction(cy, cz, aj)
441+ let cB = if ((size(bG._8) > bI))
442+ then parseIntValue(bG._8[bI])
442443 else 0
443- let bP = if ((size(bF._9) > bH))
444- then parseIntValue(bF._9[bH])
444+ let bQ = if ((size(bG._9) > bI))
445+ then parseIntValue(bG._9[bI])
445446 else 0
446- let cB = if ((size(bF._10) > bH))
447- then bF._10[bH]
447+ let cC = if ((size(bG._10) > bI))
448+ then bG._10[bI]
448449 else "0@0"
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)
450+ let cD = split(cC, "@")
451+ let cE = parseIntValue(cD[0])
452+ let cF = parseIntValue(cD[1])
453+ if (if ((cy != 0))
454+ then (cz != cF)
454455 else false)
455- then throw(((((("Prices of " + bF._11[bH]) + " don't match! WH price=") + toString(cE)) + ", your price=") + toString(cy)))
456+ then throw(((((("Prices of " + bG._11[bI]) + " don't match! WH price=") + toString(cF)) + ", your price=") + toString(cz)))
456457 else {
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"))
458+ let cG = if (bK)
459+ then (cE * cF)
460+ else fraction(cE, cF, aj)
461+ let cH = bf(cy, v, bK)
462+ if ((cy == 0))
463+ then $Tuple13((bG._1 :+ toString(bQ)), (bG._2 :+ cC), (bG._3 :+ toString(cB)), bG._4, bG._5, bG._6, (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, bG._13)
464+ else if ((cy > 0))
465+ then if ((0 > cE))
466+ then if ((cy > -(cE)))
467+ then throw(((((("Attempt to buy " + toString(cy)) + " of ") + bG._11[bI]) + ", but warehouse only sells ") + toString(-(cE))))
468+ else $Tuple13((bG._1 :+ toString(bQ)), (bG._2 :+ ((toString((cE + cy)) + "@") + toString(cF))), (bG._3 :+ toString((cB + cy))), (bG._4 + cH), bG._5, (bG._6 + cA), (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, (bG._13 + (if (bK)
469+ then (cy * aj)
470+ else cy)))
471+ else throw((("Attempt to buy " + bG._11[bI]) + " while warehouse doesn't sell it"))
472+ else if ((cE > 0))
473+ then if ((-(cy) > cE))
474+ then throw(((((("Attempt to sell " + toString(-(cy))) + " of ") + bG._11[bI]) + ", but warehouse only buys ") + toString(cE)))
475+ else if ((-(cy) > cB))
476+ then throw(((((("Attempt to sell " + toString(-(cy))) + ", but you only have ") + toString(cB)) + " of ") + bG._11[bI]))
477+ else $Tuple13((bG._1 :+ toString((bQ - cy))), (bG._2 :+ ((toString((cE + cy)) + "@") + toString(cF))), (bG._3 :+ toString((cB + cy))), (bG._4 - cH), (bG._5 - cA), bG._6, (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, (bG._13 - (if (bK)
478+ then (cy * aj)
479+ else cy)))
480+ else throw((("Attempt to sell " + bG._11[bI]) + " while warehouse doesn't buy it"))
480481 }
481482 }
482483 }
483484 }
484485
485486
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))
487+func cI (cJ,cK,cL,cM) = {
488+ func cN (bG,bI) = if ((cL[bI] > parseIntValue(cJ[bI])))
489+ then throw(((((("You have " + cJ[bI]) + " of ") + m[bI]) + ", but tried to sell ") + toString(cL[bI])))
490+ else if ((0 > cL[bI]))
491+ then throw(((("You tried to sell negative amount of " + m[bI]) + ": ") + toString(cL[bI])))
492+ else if ((cL[bI] > 0))
492493 then {
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]))
494+ let cO = bk(cK, bI, cL[bI], cM[bI])
495+ $Tuple4((bG._1 :+ cO._1), (bG._2 :+ toString((parseIntValue(cJ[bI]) - cL[bI]))), (bG._3 + cO._2), (bG._4 + cL[bI]))
495496 }
496- else $Tuple4(bF._1, (bF._2 :+ cI[bH]), bF._3, bF._4)
497+ else $Tuple4(bG._1, (bG._2 :+ cJ[bI]), bG._3, bG._4)
497498
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])
499+ let ck = am
500+ let cl = size(ck)
501+ let cm = $Tuple4(nil, nil, 0, 0)
502+ func cn (co,cp) = if ((cp >= cl))
503+ then co
504+ else cN(co, ck[cp])
504505
505- func cp (cn,co) = if ((co >= ck))
506- then cn
506+ func cq (co,cp) = if ((cp >= cl))
507+ then co
507508 else throw("List size exceeds 6")
508509
509- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
510+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
510511 }
511512
512513
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))
514+func cP (cQ,cK,cL,cR) = {
515+ func cS (bG,bI) = if ((0 > cL[bI]))
516+ then throw(((("You tried to buy negative amount of " + n[bI]) + ": ") + toString(cL[bI])))
517+ else if ((cL[bI] > 0))
517518 then {
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]))
519+ let cO = bs(cK, bI, cL[bI], cR[bI])
520+ $Tuple4((bG._1 :+ cO._1), (bG._2 :+ toString((parseIntValue(cQ[bI]) + cO._3))), (bG._3 + cO._2), (bG._4 + cL[bI]))
520521 }
521- else $Tuple4(bF._1, (bF._2 :+ cP[bH]), bF._3, bF._4)
522+ else $Tuple4(bG._1, (bG._2 :+ cQ[bI]), bG._3, bG._4)
522523
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])
524+ let ck = am
525+ let cl = size(ck)
526+ let cm = $Tuple4(nil, nil, 0, 0)
527+ func cn (co,cp) = if ((cp >= cl))
528+ then co
529+ else cS(co, ck[cp])
529530
530- func cp (cn,co) = if ((co >= ck))
531- then cn
531+ func cq (co,cp) = if ((cp >= cl))
532+ then co
532533 else throw("List size exceeds 6")
533534
534- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
535+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
535536 }
536537
537538
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)
539+func cT (cJ,cQ,cL) = {
540+ func cU (bG,bI) = {
541+ let cV = cL[bI]
542+ if ((cV > parseIntValue(cJ[bI])))
543+ then throw(((((("You have " + cJ[bI]) + " of ") + m[bI]) + ", but tried to exchange ") + toString(cV)))
544+ else if ((0 > cV))
545+ then throw(((("You tried to exchange negative amount of " + m[bI]) + ": ") + toString(cV)))
546+ else if ((cV > 0))
547+ then $Tuple4((bG._1 :+ toString((parseIntValue(cJ[bI]) - cV))), (bG._2 :+ toString((parseIntValue(cQ[bI]) + cV))), (bG._3 + fraction(cV, h, aj)), (bG._4 + cV))
548+ else $Tuple4((bG._1 :+ cJ[bI]), (bG._2 :+ cQ[bI]), bG._3, bG._4)
548549 }
549550
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])
551+ let ck = am
552+ let cl = size(ck)
553+ let cm = $Tuple4(nil, nil, 0, 0)
554+ func cn (co,cp) = if ((cp >= cl))
555+ then co
556+ else cU(co, ck[cp])
556557
557- func cp (cn,co) = if ((co >= ck))
558- then cn
558+ func cq (co,cp) = if ((cp >= cl))
559+ then co
559560 else throw("List size exceeds 6")
560561
561- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
562+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
562563 }
563564
564565
565-func cV (cW,cX,cY) = if ((cW > 0))
566+func cW (cX,cY,cZ) = if ((cX > 0))
566567 then {
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)))
568+ let da = fraction(cX, aT, ai)
569+ if ((cZ >= (cX - (3 * da))))
570+ then throw(("This trade does not cover delivery cost of " + aK(cZ, 6)))
570571 else {
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))
572+ let db = N(cY)
573+ let dc = getString(aB, db)
574+ let dd = addressFromStringValue(cY)
575+ (((if (isDefined(dc))
576+ then [ScriptTransfer(addressFromStringValue(value(dc)), da, ad)]
577+ else nil) :+ ScriptTransfer(dd, ((cX - (3 * da)) - cZ), ad)) :+ ScriptTransfer(aA, da, ad))
577578 }
578579 }
579580 else nil
580581
581582
582-func dd (de,df,dg,dh) = if ((de > 0))
583- then if ((size(df) != 1))
583+func de (df,dg,dh,di) = if ((df > 0))
584+ then if ((size(dg) != 1))
584585 then throw("exactly 1 payment must be attached")
585586 else {
586- let di = df[0]
587- let dj = di.amount
588- if (if (!(isDefined(di.assetId)))
587+ let dj = dg[0]
588+ let dk = dj.amount
589+ if (if (!(isDefined(dj.assetId)))
589590 then true
590- else (value(di.assetId) != ad))
591+ else (value(dj.assetId) != ad))
591592 then throw("USDT payments only!")
592593 else {
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))
594+ let dl = (df + di)
595+ if ((dk != dl))
596+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(df, 6)) + "+") + aK(di, 6)) + "(delivery fee)"))
597+ else if ((al > df))
597598 then throw(("Min shop trade is " + aK(al, 6)))
598599 else {
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))
600+ let dm = fraction(df, aT, ai)
601+ let db = N(dh)
602+ let dc = getString(aB, db)
603+ (((if (isDefined(dc))
604+ then [ScriptTransfer(addressFromStringValue(value(dc)), dm, ad)]
605+ else nil) :+ ScriptTransfer(addressFromStringValue(dh), (df - (3 * dm)), ad)) :+ ScriptTransfer(aA, dm, ad))
605606 }
606607 }
607608 }
608- else if ((size(df) != 0))
609+ else if ((size(dg) != 0))
609610 then throw("No payments needed")
610611 else nil
611612
612613
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"))
614+func dn (do,cY,dp,dq,dr,ds) = {
615+ let dt = value(assetInfo(fromBase58String(do)))
616+ if (!(isDefined(getInteger(aB, M(do)))))
617+ then throw((("NFT " + dt.name) + " is not staked"))
617618 else {
618- let dg = valueOrErrorMessage(getString(aB, K(dn)), (("NFT " + ds.name) + " is orphaned"))
619- if ((dg == cX))
619+ let dh = valueOrErrorMessage(getString(aB, K(do)), (("NFT " + dt.name) + " is orphaned"))
620+ if ((dh == cY))
620621 then throw("You cannot trade with yourself")
621622 else {
622- let dt = split_4C(do, ":")
623- if ((size(dt) != 3))
623+ let du = split_4C(dp, ":")
624+ if ((size(du) != 3))
624625 then throw("bpOrderStr should contain exactly 2 ':' separators")
625626 else {
626- let du = split(dt[0], "_")
627- let dv = split(dt[1], "_")
628- let dw = if ((dt[2] == ""))
627+ let dv = split(du[0], "_")
628+ let dw = split(du[1], "_")
629+ let dx = if ((du[2] == ""))
629630 then nil
630- else split_4C(dt[2], "_")
631- if ((size(du) != f))
631+ else split_4C(du[2], "_")
632+ if ((size(dv) != f))
632633 then throw("All 6 resources should be passed")
633- else if ((size(dv) != f))
634+ else if ((size(dw) != f))
634635 then throw("All 6 materials should be passed")
635636 else {
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] == ""))
637+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [do], nil))
638+ let bX = split_4C(dy, ":")
639+ let ca = split(bX[x], "_")
640+ let cb = split(bX[y], "_")
641+ let cc = if ((bX[z] == ""))
641642 then nil
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] == ""))
643+ else split_4C(bX[z], "_")
644+ let dz = parseIntValue(split(bX[A], "_")[B])
645+ let bd = U(do)
646+ let dA = bc(bd)
647+ let dB = split(dA[aZ], "_")
648+ let dC = split(dA[ba], "_")
649+ let dD = if ((dA[bb] == ""))
649650 then nil
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])
651+ else split_4C(dA[bb], "_")
652+ let cj = {
653+ let ck = dv
654+ let cl = size(ck)
655+ let cm = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dq, ca, dB, m, false, 0)
656+ func cn (co,cp) = if ((cp >= cl))
657+ then co
658+ else cv(co, ck[cp])
658659
659- func cp (cn,co) = if ((co >= ck))
660- then cn
660+ func cq (co,cp) = if ((cp >= cl))
661+ then co
661662 else throw("List size exceeds 6")
662663
663- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
664+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
664665 }
665666 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])
667+ let ck = dw
668+ let cl = size(ck)
669+ let cm = $Tuple13(nil, nil, nil, cj._4, cj._5, cj._6, 0, dr, cb, dC, n, false, cj._13)
670+ func cr (co,cp) = if ((cp >= cl))
671+ then co
672+ else cv(co, ck[cp])
672673
673- func cr (cn,co) = if ((co >= ck))
674- then cn
674+ func cs (co,cp) = if ((cp >= cl))
675+ then co
675676 else throw("List size exceeds 6")
676677
677- cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
678+ cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
678679 }
679- let be = if ((size(dw) != 0))
680+ let be = if ((size(dx) != 0))
680681 then {
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])
682+ let ck = dx
683+ let cl = size(ck)
684+ let cm = $Tuple13(nil, nil, nil, bx._4, bx._5, bx._6, 0, ds, cc, dD, o, true, bx._13)
685+ func ct (co,cp) = if ((cp >= cl))
686+ then co
687+ else cv(co, ck[cp])
687688
688- func ct (cn,co) = if ((co >= ck))
689- then cn
689+ func cu (co,cp) = if ((cp >= cl))
690+ then co
690691 else throw("List size exceeds 50")
691692
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)
693+ cu(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(cm, 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)
693694 }
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)))
695+ else $Tuple13(cc, dD, ds, bx._4, bx._5, bx._6, 0, ds, cc, dD, o, true, bx._13)
696+ let dE = be._4
697+ let dF = if ((0 > (dz - dE)))
697698 then 0
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)
699+ else (dz - dE)
700+ let dG = makeString_2C([bX[w], makeString(cj._1, "_"), makeString(bx._1, "_"), makeString_2C(be._1, "_"), toString(dF)], ":")
701+ let dH = makeString_2C([makeString(cj._2, "_"), makeString(bx._2, "_"), makeString_2C(be._2, "_")], ":")
702+ let dI = aE(invoke(aB, "saveWarehouse", [dG, do], nil))
703+ let dJ = aH(invoke(aB, "updateAccStats", [dh, fraction(d, be._13, aj)], nil))
704+ $Tuple10(StringEntry(bd, dH), cj._3, bx._3, be._3, be._5, be._6, be._13, dh, dI, dJ)
704705 }
705706 }
706707 }
708709 }
709710
710711
711-func dJ (bg) = {
712- let dK = (bg / 30)
713- let dL = [dK, dK, dK, dK, dK, dK]
714- let aG = toString(dK)
715- let cI = [aG, aG, aG, aG, aG, aG]
716- let cL = [0, 0, 0, 0, 0, 0]
717- func dM (bF,dN) = {
718- let dO = cH(cI, dN, dL, cL)
719- $Tuple3((bF._1 ++ dO._1), (bF._2 + dO._3), (bF._3 + dO._4))
712+func dK (bg) = {
713+ let dL = (bg / 30)
714+ let dM = [dL, dL, dL, dL, dL, dL]
715+ let aG = toString(dL)
716+ let cJ = [aG, aG, aG, aG, aG, aG]
717+ let cM = [0, 0, 0, 0, 0, 0]
718+ func dN (bG,dO) = {
719+ let dP = cI(cJ, dO, dM, cM)
720+ $Tuple3((bG._1 ++ dP._1), (bG._2 + dP._3), (bG._3 + dP._4))
720721 }
721722
722- let dP = {
723- let cj = p
724- let ck = size(cj)
725- let cl = $Tuple3(nil, 0, 0)
726- func cm (cn,co) = if ((co >= ck))
727- then cn
728- else dM(cn, cj[co])
723+ let dQ = {
724+ let ck = p
725+ let cl = size(ck)
726+ let cm = $Tuple3(nil, 0, 0)
727+ func cn (co,cp) = if ((cp >= cl))
728+ then co
729+ else dN(co, ck[cp])
729730
730- func cp (cn,co) = if ((co >= ck))
731- then cn
731+ func cq (co,cp) = if ((cp >= cl))
732+ then co
732733 else throw("List size exceeds 5")
733734
734- cp(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5)
735+ cq(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5)
735736 }
736- let dQ = dP._1
737- let bq = dP._2
738- let dR = dP._3
739- let dS = fraction(bq, aU, ai)
740- let dT = (bq / 100)
741- let dU = ((bq - dT) - dS)
742- $Tuple5(dQ, dU, dS, dT, dR)
737+ let dR = dQ._1
738+ let bq = dQ._2
739+ let dS = dQ._3
740+ let dT = fraction(bq, aU, ai)
741+ let dU = (bq / 100)
742+ let dV = ((bq - dU) - dT)
743+ $Tuple5(dR, dV, dT, dU, dS)
743744 }
744745
745746
746-@Callable(dV)
747-func recalcLockedVolumeREADONLY (V,dx) = {
748- let bX = bc(U(V))
749- let dW = bV(dx, bX, bX)
750- $Tuple2(nil, (dW._4 + dW._5))
747+@Callable(dW)
748+func recalcLockedVolumeREADONLY (V,dy) = {
749+ let bY = bc(U(V))
750+ let dX = bW(dy, bY, bY)
751+ $Tuple2(nil, (dX._4 + dX._5))
751752 }
752753
753754
754755
755-@Callable(dV)
756-func constructorV1 (dX) = if ((dV.caller != this))
756+@Callable(dW)
757+func constructorV1 (dY) = if ((dW.caller != this))
757758 then throw("Permission denied")
758- else [StringEntry(au(), dX)]
759+ else [StringEntry(au(), dY)]
759760
760761
761762
762-@Callable(dV)
763-func sellResources (cK,cL) = {
764- let dY = bD()
765- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
766- if ((size(dV.payments) != 0))
763+@Callable(dW)
764+func sellResources (cL,cM) = {
765+ let dZ = bE()
766+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
767+ if ((size(dW.payments) != 0))
767768 then throw("sellResources doesn't require any payments")
768769 else {
769- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
770- if ((dZ[I] != "F"))
771- then throw(("Duck location type should be Factory, but is " + dZ[I]))
770+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
771+ if ((ea[I] != "F"))
772+ then throw(("Duck location type should be Factory, but is " + ea[I]))
772773 else {
773- let ea = bA(R(S))
774- let cI = split(ea[E], "_")
775- let eb = cH(cI, dZ[J], cK, cL)
776- let dQ = eb._1
777- let ec = eb._2
778- let bq = eb._3
779- let dR = eb._4
780- let dT = (bq / 100)
781- let ed = makeString_2C([ea[D], makeString(ec, "_"), ea[F], ea[G]], ":")
782- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
783- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dR, aj)], nil))
784- $Tuple2(((dQ :+ ScriptTransfer(dV.caller, (bq - dT), ad)) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(ee, dY, ef))
774+ let eb = bB(R(S))
775+ let cJ = split(eb[E], "_")
776+ let ec = cI(cJ, ea[J], cL, cM)
777+ let dR = ec._1
778+ let ed = ec._2
779+ let bq = ec._3
780+ let dS = ec._4
781+ let dU = (bq / 100)
782+ let ee = makeString_2C([eb[D], makeString(ed, "_"), eb[F], eb[G]], ":")
783+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
784+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
785+ $Tuple2(((dR :+ ScriptTransfer(dW.caller, (bq - dU), ad)) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
785786 }
786787 }
787788 }
788789
789790
790791
791-@Callable(dV)
792-func sellResourcesWorld (O,bg) = if ((dV.caller != aD))
792+@Callable(dW)
793+func sellResourcesWorld (O,bg) = if ((dW.caller != aD))
793794 then throw("Permission denied")
794795 else {
795- let eg = dJ(bg)
796- let dQ = eg._1
797- let dU = eg._2
798- let dS = eg._3
799- let dT = eg._4
800- let dR = eg._5
801- if ((0 >= dU))
802- then throw(("This trade does not cover delivery cost of " + aK(dS, 6)))
796+ let eh = dK(bg)
797+ let dR = eh._1
798+ let dV = eh._2
799+ let dT = eh._3
800+ let dU = eh._4
801+ let dS = eh._5
802+ if ((0 >= dV))
803+ then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
803804 else {
804- let ef = aH(invoke(aB, "updateAccStats", [O, fraction(a, dR, aj)], nil))
805- $Tuple2((((dQ :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + dS))) :+ ScriptTransfer(aA, dT, ad)) :+ ScriptTransfer(aC, dU, ad)), $Tuple2(dU, ef))
805+ let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
806+ $Tuple2((((dR :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + dT))) :+ ScriptTransfer(aA, dU, ad)) :+ ScriptTransfer(aC, dV, ad)), $Tuple2(dV, eg))
806807 }
807808 }
808809
809810
810811
811-@Callable(dV)
812+@Callable(dW)
812813 func sellResourcesWorldREADONLY (bg) = {
813- let dU = dJ(bg)._2
814- $Tuple2(nil, dU)
814+ let dV = dK(bg)._2
815+ $Tuple2(nil, dV)
815816 }
816817
817818
818819
819-@Callable(dV)
820-func sellResourcesDuckDelivery (cK,cL,eh) = if (!(ab))
820+@Callable(dW)
821+func sellResourcesDuckDelivery (cL,cM,ei) = if (!(ab))
821822 then throw("Delivery feature is turned off!")
822823 else {
823- let dY = bD()
824- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
825- if ((size(dV.payments) != 0))
824+ let dZ = bE()
825+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
826+ if ((size(dW.payments) != 0))
826827 then throw("sellResources doesn't require any payments")
827828 else {
828- let ea = bA(R(S))
829- let cI = split(ea[E], "_")
830- let ei = cH(cI, eh, cK, cL)
831- let dQ = ei._1
832- let ec = ei._2
833- let bq = ei._3
834- let dR = ei._4
835- let ed = makeString_2C([ea[D], makeString(ec, "_"), ea[F], ea[G]], ":")
836- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
837- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dR, aj)], nil))
838- let ej = fraction(bq, aU, ai)
839- let dS = if ((k > ej))
829+ let eb = bB(R(S))
830+ let cJ = split(eb[E], "_")
831+ let ej = cI(cJ, ei, cL, cM)
832+ let dR = ej._1
833+ let ed = ej._2
834+ let bq = ej._3
835+ let dS = ej._4
836+ let ee = makeString_2C([eb[D], makeString(ed, "_"), eb[F], eb[G]], ":")
837+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
838+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
839+ let ek = fraction(bq, aU, ai)
840+ let dT = if ((k > ek))
840841 then k
841- else ej
842- let dT = (bq / 100)
843- if ((dS >= (bq - dT)))
844- then throw(("This trade does not cover delivery cost of " + aK(dS, 6)))
842+ else ek
843+ let dU = (bq / 100)
844+ if ((dT >= (bq - dU)))
845+ then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
845846 else {
846- let ek = valueOrElse(getInteger(X), 0)
847- $Tuple2((((dQ :+ ScriptTransfer(dV.caller, ((bq - dT) - dS), ad)) :+ IntegerEntry(X, (ek + dS))) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(ee, dY, ef))
847+ let el = valueOrElse(getInteger(X), 0)
848+ $Tuple2((((dR :+ ScriptTransfer(dW.caller, ((bq - dU) - dT), ad)) :+ IntegerEntry(X, (el + dT))) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
848849 }
849850 }
850851 }
851852
852853
853854
854-@Callable(dV)
855-func sellResourcesLandDelivery (cK,cL,V,eh) = if (!(ab))
855+@Callable(dW)
856+func sellResourcesLandDelivery (cL,cM,V,ei) = if (!(ab))
856857 then throw("Delivery feature is turned off!")
857858 else {
858- let dY = bD()
859- if ((size(dV.payments) != 0))
859+ let dZ = bE()
860+ if ((size(dW.payments) != 0))
860861 then throw("sellResources doesn't require any payments")
861862 else {
862- let el = dV.caller
863- let O = toString(el)
864- let em = value(assetInfo(fromBase58String(V)))
863+ let em = dW.caller
864+ let O = toString(em)
865+ let en = value(assetInfo(fromBase58String(V)))
865866 if (!(isDefined(getInteger(aB, M(V)))))
866- then throw((("NFT " + em.name) + " is not staked"))
867+ then throw((("NFT " + en.name) + " is not staked"))
867868 else {
868- let en = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + em.name) + " is orphaned"))
869- if ((en != O))
869+ let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
870+ if ((eo != O))
870871 then throw((e + " is not yours"))
871872 else {
872- let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
873- let bW = split_4C(dx, ":")
874- let cI = split(bW[x], "_")
875- let eo = cH(cI, eh, cK, cL)
876- let dQ = eo._1
877- let ec = eo._2
878- let bq = eo._3
879- let dR = eo._4
880- let dF = makeString_2C([bW[w], makeString(ec, "_"), bW[y], bW[z], bW[A]], ":")
881- let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
882- let ef = aH(invoke(aB, "updateAccStats", [O, fraction(a, dR, aj)], nil))
883- let ej = fraction(bq, aU, ai)
884- let dS = if ((k > ej))
873+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
874+ let bX = split_4C(dy, ":")
875+ let cJ = split(bX[x], "_")
876+ let ep = cI(cJ, ei, cL, cM)
877+ let dR = ep._1
878+ let ed = ep._2
879+ let bq = ep._3
880+ let dS = ep._4
881+ let dG = makeString_2C([bX[w], makeString(ed, "_"), bX[y], bX[z], bX[A]], ":")
882+ let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
883+ let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
884+ let ek = fraction(bq, aU, ai)
885+ let dT = if ((k > ek))
885886 then k
886- else ej
887- let dT = (bq / 100)
888- if ((dS >= (bq - dT)))
889- then throw(("This trade does not cover delivery cost of " + aK(dS, 6)))
887+ else ek
888+ let dU = (bq / 100)
889+ if ((dT >= (bq - dU)))
890+ then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
890891 else {
891- let ek = valueOrElse(getInteger(X), 0)
892- $Tuple2((((dQ :+ ScriptTransfer(dV.caller, ((bq - dT) - dS), ad)) :+ IntegerEntry(X, (ek + dS))) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dH, dY, ef))
892+ let el = valueOrElse(getInteger(X), 0)
893+ $Tuple2((((dR :+ ScriptTransfer(dW.caller, ((bq - dU) - dT), ad)) :+ IntegerEntry(X, (el + dT))) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(dI, dZ, eg))
893894 }
894895 }
895896 }
898899
899900
900901
901-@Callable(dV)
902-func buyMaterials (cK,cQ) = {
903- let dY = bD()
904- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
905- if ((size(dV.payments) != 1))
902+@Callable(dW)
903+func buyMaterials (cL,cR) = {
904+ let dZ = bE()
905+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
906+ if ((size(dW.payments) != 1))
906907 then throw("exactly 1 payment must be attached")
907908 else {
908- let di = dV.payments[0]
909- let dj = di.amount
910- if (if (!(isDefined(di.assetId)))
909+ let dj = dW.payments[0]
910+ let dk = dj.amount
911+ if (if (!(isDefined(dj.assetId)))
911912 then true
912- else (value(di.assetId) != ad))
913+ else (value(dj.assetId) != ad))
913914 then throw("USDT payments only!")
914915 else {
915- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
916- if ((dZ[I] != "F"))
917- then throw(("Duck location type should be Factory, but is " + dZ[I]))
916+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
917+ if ((ea[I] != "F"))
918+ then throw(("Duck location type should be Factory, but is " + ea[I]))
918919 else {
919- let ea = bA(R(S))
920- let cP = split(ea[F], "_")
921- let ep = cO(cP, dZ[J], cK, cQ)
922- let dQ = ep._1
923- let eq = ep._2
924- let by = ep._3
925- let er = ep._4
926- if ((by > dj))
927- then throw(((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)))
920+ let eb = bB(R(S))
921+ let cQ = split(eb[F], "_")
922+ let eq = cP(cQ, ea[J], cL, cR)
923+ let dR = eq._1
924+ let er = eq._2
925+ let bz = eq._3
926+ let es = eq._4
927+ if ((bz > dk))
928+ then throw(((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)))
928929 else {
929- let ed = makeString([ea[D], ea[E], makeString(eq, "_"), ea[G]], ":")
930- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
931- let aw = if (((dj - by) > 0))
932- then [ScriptTransfer(dV.caller, (dj - by), ad)]
930+ let ee = makeString([eb[D], eb[E], makeString(er, "_"), eb[G]], ":")
931+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
932+ let aw = if (((dk - bz) > 0))
933+ then [ScriptTransfer(dW.caller, (dk - bz), ad)]
933934 else nil
934- let dT = (by / 100)
935- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, er, aj)], nil))
936- $Tuple2(((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(ee, dY, ef))
935+ let dU = (bz / 100)
936+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, es, aj)], nil))
937+ $Tuple2(((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
937938 }
938939 }
939940 }
942943
943944
944945
945-@Callable(dV)
946-func buyMaterialsDuckDelivery (cK,cQ,eh) = if (!(ab))
946+@Callable(dW)
947+func buyMaterialsDuckDelivery (cL,cR,ei) = if (!(ab))
947948 then throw("Delivery feature is turned off!")
948949 else {
949- let dY = bD()
950- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
951- if ((size(dV.payments) != 1))
950+ let dZ = bE()
951+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
952+ if ((size(dW.payments) != 1))
952953 then throw("exactly 1 payment must be attached")
953954 else {
954- let di = dV.payments[0]
955- let dj = di.amount
956- if (if (!(isDefined(di.assetId)))
955+ let dj = dW.payments[0]
956+ let dk = dj.amount
957+ if (if (!(isDefined(dj.assetId)))
957958 then true
958- else (value(di.assetId) != ad))
959+ else (value(dj.assetId) != ad))
959960 then throw("USDT payments only!")
960961 else {
961- let ea = bA(R(S))
962- let cP = split(ea[F], "_")
963- let es = cO(cP, eh, cK, cQ)
964- let dQ = es._1
965- let eq = es._2
966- let by = es._3
967- let er = es._4
968- let ed = makeString([ea[D], ea[E], makeString(eq, "_"), ea[G]], ":")
969- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
970- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, er, aj)], nil))
971- let ej = fraction(by, aU, ai)
972- let dS = if ((k > ej))
962+ let eb = bB(R(S))
963+ let cQ = split(eb[F], "_")
964+ let et = cP(cQ, ei, cL, cR)
965+ let dR = et._1
966+ let er = et._2
967+ let bz = et._3
968+ let es = et._4
969+ let ee = makeString([eb[D], eb[E], makeString(er, "_"), eb[G]], ":")
970+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
971+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, es, aj)], nil))
972+ let ek = fraction(bz, aU, ai)
973+ let dT = if ((k > ek))
973974 then k
974- else ej
975- let dk = (by + dS)
976- if ((dk > dj))
977- then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(dS, 6)) + "(delivery fee)"))
975+ else ek
976+ let dl = (bz + dT)
977+ if ((dl > dk))
978+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
978979 else {
979- let aw = if (((dj - dk) > 0))
980- then [ScriptTransfer(dV.caller, (dj - dk), ad)]
980+ let aw = if (((dk - dl) > 0))
981+ then [ScriptTransfer(dW.caller, (dk - dl), ad)]
981982 else nil
982- let dT = (by / 100)
983- let ek = valueOrElse(getInteger(X), 0)
984- $Tuple2((((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ek + dS))), $Tuple3(ee, dY, ef))
983+ let dU = (bz / 100)
984+ let el = valueOrElse(getInteger(X), 0)
985+ $Tuple2((((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(ef, dZ, eg))
985986 }
986987 }
987988 }
989990
990991
991992
992-@Callable(dV)
993-func buyMaterialsLandDelivery (cK,cQ,V,eh) = if (!(ab))
993+@Callable(dW)
994+func buyMaterialsLandDelivery (cL,cR,V,ei) = if (!(ab))
994995 then throw("Delivery feature is turned off!")
995996 else {
996- let dY = bD()
997- if ((size(dV.payments) != 1))
997+ let dZ = bE()
998+ if ((size(dW.payments) != 1))
998999 then throw("exactly 1 payment must be attached")
9991000 else {
1000- let di = dV.payments[0]
1001- let dj = di.amount
1002- if (if (!(isDefined(di.assetId)))
1001+ let dj = dW.payments[0]
1002+ let dk = dj.amount
1003+ if (if (!(isDefined(dj.assetId)))
10031004 then true
1004- else (value(di.assetId) != ad))
1005+ else (value(dj.assetId) != ad))
10051006 then throw("USDT payments only!")
10061007 else {
1007- let el = dV.caller
1008- let O = toString(el)
1009- let em = value(assetInfo(fromBase58String(V)))
1008+ let em = dW.caller
1009+ let O = toString(em)
1010+ let en = value(assetInfo(fromBase58String(V)))
10101011 if (!(isDefined(getInteger(aB, M(V)))))
1011- then throw((("NFT " + em.name) + " is not staked"))
1012+ then throw((("NFT " + en.name) + " is not staked"))
10121013 else {
1013- let en = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + em.name) + " is orphaned"))
1014- if ((en != O))
1014+ let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1015+ if ((eo != O))
10151016 then throw((e + " is not yours"))
10161017 else {
1017- let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1018- let bW = split_4C(dx, ":")
1019- let cP = split(bW[y], "_")
1020- let et = cO(cP, eh, cK, cQ)
1021- let dQ = et._1
1022- let eq = et._2
1023- let by = et._3
1024- let er = et._4
1025- let dF = makeString_2C([bW[w], bW[x], makeString(eq, "_"), bW[z], bW[A]], ":")
1026- let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1027- let ef = aH(invoke(aB, "updateAccStats", [O, fraction(a, er, aj)], nil))
1028- let ej = fraction(by, aU, ai)
1029- let dS = if ((k > ej))
1018+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1019+ let bX = split_4C(dy, ":")
1020+ let cQ = split(bX[y], "_")
1021+ let eu = cP(cQ, ei, cL, cR)
1022+ let dR = eu._1
1023+ let er = eu._2
1024+ let bz = eu._3
1025+ let es = eu._4
1026+ let dG = makeString_2C([bX[w], bX[x], makeString(er, "_"), bX[z], bX[A]], ":")
1027+ let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1028+ let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, es, aj)], nil))
1029+ let ek = fraction(bz, aU, ai)
1030+ let dT = if ((k > ek))
10301031 then k
1031- else ej
1032- let dk = (by + dS)
1033- if ((dk > dj))
1034- then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(dS, 6)) + "(delivery fee)"))
1032+ else ek
1033+ let dl = (bz + dT)
1034+ if ((dl > dk))
1035+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
10351036 else {
1036- let aw = if (((dj - dk) > 0))
1037- then [ScriptTransfer(dV.caller, (dj - dk), ad)]
1037+ let aw = if (((dk - dl) > 0))
1038+ then [ScriptTransfer(dW.caller, (dk - dl), ad)]
10381039 else nil
1039- let dT = (by / 100)
1040- let ek = valueOrElse(getInteger(X), 0)
1041- $Tuple2((((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ek + dS))), $Tuple3(dH, dY, ef))
1040+ let dU = (bz / 100)
1041+ let el = valueOrElse(getInteger(X), 0)
1042+ $Tuple2((((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(dI, dZ, eg))
10421043 }
10431044 }
10441045 }
10481049
10491050
10501051
1051-@Callable(dV)
1052-func exchangeResources (cK) = {
1053- let dY = bD()
1054- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
1055- if ((size(dV.payments) != 1))
1052+@Callable(dW)
1053+func exchangeResources (cL) = {
1054+ let dZ = bE()
1055+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1056+ if ((size(dW.payments) != 1))
10561057 then throw("exactly 1 payment must be attached")
10571058 else {
1058- let di = dV.payments[0]
1059- let dj = di.amount
1060- if (if (!(isDefined(di.assetId)))
1059+ let dj = dW.payments[0]
1060+ let dk = dj.amount
1061+ if (if (!(isDefined(dj.assetId)))
10611062 then true
1062- else (value(di.assetId) != ad))
1063+ else (value(dj.assetId) != ad))
10631064 then throw("USDT payments only!")
10641065 else {
1065- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
1066- if ((dZ[I] != "F"))
1067- then throw(("Duck location type should be Factory, but is " + dZ[I]))
1066+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1067+ if ((ea[I] != "F"))
1068+ then throw(("Duck location type should be Factory, but is " + ea[I]))
10681069 else {
1069- let ea = bA(R(S))
1070- let cI = split(ea[E], "_")
1071- let cP = split(ea[F], "_")
1072- let eu = cS(cI, cP, cK)
1073- let ec = eu._1
1074- let eq = eu._2
1075- let by = eu._3
1076- let ev = eu._4
1077- if ((by > dj))
1078- then throw(((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)))
1070+ let eb = bB(R(S))
1071+ let cJ = split(eb[E], "_")
1072+ let cQ = split(eb[F], "_")
1073+ let ev = cT(cJ, cQ, cL)
1074+ let ed = ev._1
1075+ let er = ev._2
1076+ let bz = ev._3
1077+ let ew = ev._4
1078+ if ((bz > dk))
1079+ then throw(((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)))
10791080 else {
1080- let ed = makeString([ea[D], makeString(ec, "_"), makeString(eq, "_"), ea[G]], ":")
1081- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
1082- let aw = if (((dj - by) > 0))
1083- then [ScriptTransfer(dV.caller, (dj - by), ad)]
1081+ let ee = makeString([eb[D], makeString(ed, "_"), makeString(er, "_"), eb[G]], ":")
1082+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1083+ let aw = if (((dk - bz) > 0))
1084+ then [ScriptTransfer(dW.caller, (dk - bz), ad)]
10841085 else nil
1085- let dT = (by / 100)
1086- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ev, aj)], nil))
1087- $Tuple2((aw :+ ScriptTransfer(aA, dT, ad)), $Tuple3(ee, dY, ef))
1086+ let dU = (bz / 100)
1087+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ew, aj)], nil))
1088+ $Tuple2((aw :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
10881089 }
10891090 }
10901091 }
10931094
10941095
10951096
1096-@Callable(dV)
1097-func exchangeResourcesDuckDelivery (cK) = {
1098- let dY = bD()
1099- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
1100- if ((size(dV.payments) != 1))
1097+@Callable(dW)
1098+func exchangeResourcesDuckDelivery (cL) = {
1099+ let dZ = bE()
1100+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1101+ if ((size(dW.payments) != 1))
11011102 then throw("exactly 1 payment must be attached")
11021103 else {
1103- let di = dV.payments[0]
1104- let dj = di.amount
1105- if (if (!(isDefined(di.assetId)))
1104+ let dj = dW.payments[0]
1105+ let dk = dj.amount
1106+ if (if (!(isDefined(dj.assetId)))
11061107 then true
1107- else (value(di.assetId) != ad))
1108+ else (value(dj.assetId) != ad))
11081109 then throw("USDT payments only!")
11091110 else {
1110- let ea = bA(R(S))
1111- let cI = split(ea[E], "_")
1112- let cP = split(ea[F], "_")
1113- let ew = cS(cI, cP, cK)
1114- let ec = ew._1
1115- let eq = ew._2
1116- let by = ew._3
1117- let ev = ew._4
1118- let ej = fraction(by, aV, ai)
1119- let dS = if ((l > ej))
1111+ let eb = bB(R(S))
1112+ let cJ = split(eb[E], "_")
1113+ let cQ = split(eb[F], "_")
1114+ let ex = cT(cJ, cQ, cL)
1115+ let ed = ex._1
1116+ let er = ex._2
1117+ let bz = ex._3
1118+ let ew = ex._4
1119+ let ek = fraction(bz, aV, ai)
1120+ let dT = if ((l > ek))
11201121 then l
1121- else ej
1122- let dk = (by + dS)
1123- if ((dk > dj))
1124- then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(dS, 6)) + "(delivery fee)"))
1122+ else ek
1123+ let dl = (bz + dT)
1124+ if ((dl > dk))
1125+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
11251126 else {
1126- let ed = makeString([ea[D], makeString(ec, "_"), makeString(eq, "_"), ea[G]], ":")
1127- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
1128- let aw = if (((dj - dk) > 0))
1129- then [ScriptTransfer(dV.caller, (dj - dk), ad)]
1127+ let ee = makeString([eb[D], makeString(ed, "_"), makeString(er, "_"), eb[G]], ":")
1128+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1129+ let aw = if (((dk - dl) > 0))
1130+ then [ScriptTransfer(dW.caller, (dk - dl), ad)]
11301131 else nil
1131- let dT = (by / 100)
1132- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ev, aj)], nil))
1133- let ek = valueOrElse(getInteger(X), 0)
1134- $Tuple2(((aw :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ek + dS))), $Tuple3(ee, dY, ef))
1132+ let dU = (bz / 100)
1133+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ew, aj)], nil))
1134+ let el = valueOrElse(getInteger(X), 0)
1135+ $Tuple2(((aw :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(ef, dZ, eg))
11351136 }
11361137 }
11371138 }
11391140
11401141
11411142
1142-@Callable(dV)
1143-func exchangeResourcesLandDelivery (cK,V) = {
1144- let dY = bD()
1145- if ((size(dV.payments) != 1))
1143+@Callable(dW)
1144+func exchangeResourcesLandDelivery (cL,V) = {
1145+ let dZ = bE()
1146+ if ((size(dW.payments) != 1))
11461147 then throw("exactly 1 payment must be attached")
11471148 else {
1148- let di = dV.payments[0]
1149- let dj = di.amount
1150- if (if (!(isDefined(di.assetId)))
1149+ let dj = dW.payments[0]
1150+ let dk = dj.amount
1151+ if (if (!(isDefined(dj.assetId)))
11511152 then true
1152- else (value(di.assetId) != ad))
1153+ else (value(dj.assetId) != ad))
11531154 then throw("USDT payments only!")
11541155 else {
1155- let el = dV.caller
1156- let O = toString(el)
1157- let em = value(assetInfo(fromBase58String(V)))
1156+ let em = dW.caller
1157+ let O = toString(em)
1158+ let en = value(assetInfo(fromBase58String(V)))
11581159 if (!(isDefined(getInteger(aB, M(V)))))
1159- then throw((("NFT " + em.name) + " is not staked"))
1160+ then throw((("NFT " + en.name) + " is not staked"))
11601161 else {
1161- let en = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + em.name) + " is orphaned"))
1162- if ((en != O))
1162+ let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1163+ if ((eo != O))
11631164 then throw((e + " is not yours"))
11641165 else {
1165- let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1166- let bW = split_4C(dx, ":")
1167- let cI = split(bW[x], "_")
1168- let cP = split(bW[y], "_")
1169- let ex = cS(cI, cP, cK)
1170- let ec = ex._1
1171- let eq = ex._2
1172- let by = ex._3
1173- let ev = ex._4
1174- let dF = makeString_2C([bW[w], makeString(ec, "_"), makeString(eq, "_"), bW[z], bW[A]], ":")
1175- let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1176- let ef = aH(invoke(aB, "updateAccStats", [O, fraction(a, ev, aj)], nil))
1177- let ej = fraction(by, aV, ai)
1178- let dS = if ((l > ej))
1166+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1167+ let bX = split_4C(dy, ":")
1168+ let cJ = split(bX[x], "_")
1169+ let cQ = split(bX[y], "_")
1170+ let ey = cT(cJ, cQ, cL)
1171+ let ed = ey._1
1172+ let er = ey._2
1173+ let bz = ey._3
1174+ let ew = ey._4
1175+ let dG = makeString_2C([bX[w], makeString(ed, "_"), makeString(er, "_"), bX[z], bX[A]], ":")
1176+ let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1177+ let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, ew, aj)], nil))
1178+ let ek = fraction(bz, aV, ai)
1179+ let dT = if ((l > ek))
11791180 then l
1180- else ej
1181- let dk = (by + dS)
1182- if ((dk > dj))
1183- then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(dS, 6)) + "(delivery fee)"))
1181+ else ek
1182+ let dl = (bz + dT)
1183+ if ((dl > dk))
1184+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
11841185 else {
1185- let aw = if (((dj - dk) > 0))
1186- then [ScriptTransfer(dV.caller, (dj - dk), ad)]
1186+ let aw = if (((dk - dl) > 0))
1187+ then [ScriptTransfer(dW.caller, (dk - dl), ad)]
11871188 else nil
1188- let dT = (by / 100)
1189- let ek = valueOrElse(getInteger(X), 0)
1190- $Tuple2(((aw :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ek + dS))), $Tuple3(dH, dY, ef))
1189+ let dU = (bz / 100)
1190+ let el = valueOrElse(getInteger(X), 0)
1191+ $Tuple2(((aw :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(dI, dZ, eg))
11911192 }
11921193 }
11931194 }
11971198
11981199
11991200
1200-@Callable(dV)
1201-func craftGoods (ey,ez) = {
1202- let dY = bD()
1203- if ((size(dV.payments) != 1))
1201+@Callable(dW)
1202+func craftGoods (ez,eA) = {
1203+ let dZ = bE()
1204+ if ((size(dW.payments) != 1))
12041205 then throw("exactly 1 payment must be attached")
12051206 else {
1206- let di = dV.payments[0]
1207- let dj = di.amount
1208- let eA = valueOrErrorMessage(di.assetId, "WAVES can't be used as payment")
1209- if ((eA != ad))
1207+ let dj = dW.payments[0]
1208+ let dk = dj.amount
1209+ let eB = valueOrErrorMessage(dj.assetId, "WAVES can't be used as payment")
1210+ if ((eB != ad))
12101211 then throw("USDT payments only!")
1211- else if ((dj != ai))
1212+ else if ((dk != ai))
12121213 then throw("exactly 1 USDT must be attached as payment")
1213- else if ((0 >= ez))
1214+ else if ((0 >= eA))
12141215 then throw("Quantity should be positive")
12151216 else {
1216- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
1217- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
1218- if ((dZ[I] != "M"))
1219- then throw(("Duck location type should be Manufactory, but is " + dZ[I]))
1217+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1218+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1219+ if ((ea[I] != "M"))
1220+ then throw(("Duck location type should be Manufactory, but is " + ea[I]))
12201221 else {
1221- let eB = dZ[H]
1222- let ea = bA(R(S))
1223- let cP = split(ea[F], "_")
1224- if (if ((0 > ey))
1222+ let eC = ea[H]
1223+ let eb = bB(R(S))
1224+ let cQ = split(eb[F], "_")
1225+ if (if ((0 > ez))
12251226 then true
1226- else (ey >= size(r)))
1227- then throw(("Unknown product idx=" + toString(ey)))
1227+ else (ez >= size(r)))
1228+ then throw(("Unknown product idx=" + toString(ez)))
12281229 else {
1229- let aa = split(r[ey], "_")
1230+ let aa = split(r[ez], "_")
12301231 if ((size(aa) != u))
1231- then throw(("Fatal: unknown recipe: " + r[ey]))
1232+ then throw(("Fatal: unknown recipe: " + r[ez]))
12321233 else {
1233- let eC = parseIntValue(aa[t])
1234- if ((p[eC] != eB))
1235- then throw(((("This product is available in " + p[eC]) + ", but you are in ") + eB))
1234+ let eD = parseIntValue(aa[t])
1235+ if ((p[eD] != eC))
1236+ then throw(((("This product is available in " + p[eD]) + ", but you are in ") + eC))
12361237 else {
1237- let eD = if ((ea[G] == ""))
1238+ let eE = if ((eb[G] == ""))
12381239 then nil
1239- else split_4C(ea[G], "_")
1240- func eE (bF,eF) = {
1241- let aI = bF._2
1242- let eG = if ((size(eD) > aI))
1243- then eD[aI]
1240+ else split_4C(eb[G], "_")
1241+ func eF (bG,eG) = {
1242+ let aI = bG._2
1243+ let eH = if ((size(eE) > aI))
1244+ then eE[aI]
12441245 else "0"
1245- let dO = parseIntValue(eG)
1246- let bg = (ez * v)
1247- let eH = if ((aI == ey))
1248- then toString((dO + bg))
1249- else eG
1250- $Tuple2((bF._1 :+ eH), (aI + 1))
1246+ let dP = parseIntValue(eH)
1247+ let bg = (eA * v)
1248+ let eI = if ((aI == ez))
1249+ then toString((dP + bg))
1250+ else eH
1251+ $Tuple2((bG._1 :+ eI), (aI + 1))
12511252 }
12521253
1253- let eI = ( let cj = r
1254- let ck = size(cj)
1255- let cl = $Tuple2(nil, 0)
1256- func cm (cn,co) = if ((co >= ck))
1257- then cn
1258- else eE(cn, cj[co])
1254+ let eJ = ( let ck = r
1255+ let cl = size(ck)
1256+ let cm = $Tuple2(nil, 0)
1257+ func cn (co,cp) = if ((cp >= cl))
1258+ then co
1259+ else eF(co, ck[cp])
12591260
1260- func cp (cn,co) = if ((co >= ck))
1261- then cn
1261+ func cq (co,cp) = if ((cp >= cl))
1262+ then co
12621263 else throw("List size exceeds 50")
12631264
1264- 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
1265- func eJ (bF,bH) = {
1266- let eK = (((parseIntValue(aa[bH]) * ah) * ez) * parseIntValue(aa[s]))
1267- let eL = parseIntValue(cP[bH])
1268- if ((eK > eL))
1269- then throw(((((((("You have " + aK(eL, 8)) + " of ") + n[bH]) + ", but recipe requires ") + aK(eK, 8)) + " for quantity ") + toString(ez)))
1270- else if ((eK > 0))
1271- then $Tuple2((bF._1 :+ toString((eL - eK))), (bF._2 + eK))
1272- else $Tuple2((bF._1 :+ cP[bH]), bF._2)
1265+ cq(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cm, 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
1266+ func eK (bG,bI) = {
1267+ let eL = (((parseIntValue(aa[bI]) * ah) * eA) * parseIntValue(aa[s]))
1268+ let eM = parseIntValue(cQ[bI])
1269+ if ((eL > eM))
1270+ then throw(((((((("You have " + aK(eM, 8)) + " of ") + n[bI]) + ", but recipe requires ") + aK(eL, 8)) + " for quantity ") + toString(eA)))
1271+ else if ((eL > 0))
1272+ then $Tuple2((bG._1 :+ toString((eM - eL))), (bG._2 + eL))
1273+ else $Tuple2((bG._1 :+ cQ[bI]), bG._2)
12731274 }
12741275
1275- let eM = {
1276- let cj = am
1277- let ck = size(cj)
1278- let cl = $Tuple2(nil, 0)
1279- func cq (cn,co) = if ((co >= ck))
1280- then cn
1281- else eJ(cn, cj[co])
1276+ let eN = {
1277+ let ck = am
1278+ let cl = size(ck)
1279+ let cm = $Tuple2(nil, 0)
1280+ func cr (co,cp) = if ((cp >= cl))
1281+ then co
1282+ else eK(co, ck[cp])
12821283
1283- func cr (cn,co) = if ((co >= ck))
1284- then cn
1284+ func cs (co,cp) = if ((cp >= cl))
1285+ then co
12851286 else throw("List size exceeds 6")
12861287
1287- cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
1288+ cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
12881289 }
1289- let ed = makeString([ea[D], ea[E], makeString(eM._1, "_"), makeString_2C(eI, "_")], ":")
1290- let eN = aE(invoke(aB, "updateBackpack", [S, ed], nil))
1291- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(b, eM._2, aj)], nil))
1292- $Tuple2(nil, $Tuple3(eN, dY, ef))
1290+ let ee = makeString([eb[D], eb[E], makeString(eN._1, "_"), makeString_2C(eJ, "_")], ":")
1291+ let eO = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1292+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(b, eN._2, aj)], nil))
1293+ $Tuple2(nil, $Tuple3(eO, dZ, eg))
12931294 }
12941295 }
12951296 }
13001301
13011302
13021303
1303-@Callable(dV)
1304-func setWarehouseOrder (eO,V) = {
1305- let el = dV.originCaller
1306- let O = toString(el)
1307- let eN = if ((el != aA))
1308- then bC()
1304+@Callable(dW)
1305+func setWarehouseOrder (eP,V) = {
1306+ let em = dW.originCaller
1307+ let O = toString(em)
1308+ let eO = if ((em != aA))
1309+ then bD()
13091310 else false
1310- let em = value(assetInfo(fromBase58String(V)))
1311+ let en = value(assetInfo(fromBase58String(V)))
13111312 if (!(isDefined(getInteger(aB, M(V)))))
1312- then throw((("NFT " + em.name) + " is not staked"))
1313+ then throw((("NFT " + en.name) + " is not staked"))
13131314 else {
1314- let en = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + em.name) + " is orphaned"))
1315- if (if ((el != aA))
1316- then (en != O)
1315+ let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1316+ if (if ((em != aA))
1317+ then (eo != O)
13171318 else false)
13181319 then throw((e + " is not yours"))
13191320 else {
1320- let eP = split_4C(eO, ":")
1321- let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1322- let bW = split_4C(dx, ":")
1323- let eQ = split(bW[A], "_")
1324- let eR = parseIntValue(eQ[C])
1321+ let eQ = split_4C(eP, ":")
1322+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1323+ let bX = split_4C(dy, ":")
1324+ let eR = split(bX[A], "_")
1325+ let eS = parseIntValue(eR[C])
13251326 let bd = U(V)
1326- let bX = bc(bd)
1327- let dW = bV(bW, bX, eP)
1328- let eS = dW._4
1329- let eT = dW._5
1330- let eU = dW._7
1331- let eV = (eS + eT)
1332- let eW = ((eR - eU) - eV)
1333- if ((0 > eW))
1334- then throw((((((("Attempt to reserve " + toString(eS)) + " space for buy orders, and ") + toString(eT)) + " space for sell orders (and occupied=") + toString(eU)) + "), leads to negative free space"))
1327+ let bY = bc(bd)
1328+ let dX = bW(bX, bY, eQ)
1329+ let eT = dX._4
1330+ let eU = dX._5
1331+ let eV = dX._7
1332+ let eW = (eT + eU)
1333+ let eX = ((eS - eV) - eW)
1334+ if ((0 > eX))
1335+ then throw((((((("Attempt to reserve " + toString(eT)) + " space for buy orders, and ") + toString(eU)) + " space for sell orders (and occupied=") + toString(eV)) + "), leads to negative free space"))
13351336 else {
1336- let dF = makeString_2C([bW[w], makeString(dW._1, "_"), makeString(dW._2, "_"), makeString_2C(dW._3, "_"), toString(eV)], ":")
1337- let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1338- let eX = dW._6
1339- let eY = if ((eX > 0))
1340- then if ((size(dV.payments) != 1))
1337+ let dG = makeString_2C([bX[w], makeString(dX._1, "_"), makeString(dX._2, "_"), makeString_2C(dX._3, "_"), toString(eW)], ":")
1338+ let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1339+ let eY = dX._6
1340+ let eZ = if ((eY > 0))
1341+ then if ((size(dW.payments) != 1))
13411342 then throw("exactly 1 payment must be attached")
13421343 else {
1343- let di = dV.payments[0]
1344- let dj = di.amount
1345- let eA = valueOrErrorMessage(di.assetId, "WAVES can't be used as payment")
1346- if ((eA != ad))
1344+ let dj = dW.payments[0]
1345+ let dk = dj.amount
1346+ let eB = valueOrErrorMessage(dj.assetId, "WAVES can't be used as payment")
1347+ if ((eB != ad))
13471348 then throw("USDT payments only!")
1348- else if ((dj != eX))
1349- then throw(("Payment needed is " + toString(eX)))
1350- else [StringEntry(bd, eO)]
1349+ else if ((dk != eY))
1350+ then throw(("Payment needed is " + toString(eY)))
1351+ else [StringEntry(bd, eP)]
13511352 }
1352- else if ((eX == 0))
1353- then if ((size(dV.payments) != 0))
1353+ else if ((eY == 0))
1354+ then if ((size(dW.payments) != 0))
13541355 then throw("No payments needed")
1355- else [StringEntry(bd, eO)]
1356- else if ((size(dV.payments) != 0))
1356+ else [StringEntry(bd, eP)]
1357+ else if ((size(dW.payments) != 0))
13571358 then throw("No payments needed")
1358- else [ScriptTransfer(addressFromStringValue(en), -(eX), ad), StringEntry(bd, eO)]
1359- $Tuple2(eY, $Tuple2(eN, dH))
1359+ else [ScriptTransfer(addressFromStringValue(eo), -(eY), ad), StringEntry(bd, eP)]
1360+ $Tuple2(eZ, $Tuple2(eO, dI))
13601361 }
13611362 }
13621363 }
13641365
13651366
13661367
1367-@Callable(dV)
1368-func acceptWarehouseOrder (do,dn,S) = {
1369- let dY = bD()
1370- let dc = dV.originCaller
1371- let cX = toString(dc)
1372- let eZ = valueOrErrorMessage(getString(aB, P(cX)), "You don't have a duck staked")
1373- let dZ = valueOrElse(getString(aB, T(eZ)), g)
1374- let fa = split(value(dZ), "_")
1375- if ((fa[I] != "L"))
1376- then throw((("Duck location type is " + fa[I]) + ", but should be L"))
1377- else if ((eZ != S))
1378- then throw(((("Your staked duck is " + eZ) + ", but passed ") + S))
1368+@Callable(dW)
1369+func acceptWarehouseOrder (dp,do,S) = {
1370+ let dZ = bE()
1371+ let dd = dW.originCaller
1372+ let cY = toString(dd)
1373+ let fa = valueOrErrorMessage(getString(aB, P(cY)), "You don't have a duck staked")
1374+ let ea = valueOrElse(getString(aB, T(fa)), g)
1375+ let fb = split(value(ea), "_")
1376+ if ((fb[I] != "L"))
1377+ then throw((("Duck location type is " + fb[I]) + ", but should be L"))
1378+ else if ((fa != S))
1379+ then throw(((("Your staked duck is " + fa) + ", but passed ") + S))
13791380 else {
1380- let bB = R(S)
1381- let ea = bA(bB)
1382- let dp = split(ea[E], "_")
1383- let dq = split(ea[F], "_")
1384- let dr = if ((ea[G] == ""))
1381+ let bC = R(S)
1382+ let eb = bB(bC)
1383+ let dq = split(eb[E], "_")
1384+ let dr = split(eb[F], "_")
1385+ let ds = if ((eb[G] == ""))
13851386 then nil
1386- else split_4C(ea[G], "_")
1387- let fb = dm(dn, cX, do, dp, dq, dr)
1388- let fc = fb._1
1389- let fd = fb._2
1390- let fe = fb._3
1391- let ff = fb._4
1392- let cW = fb._5
1393- let de = fb._6
1394- let fg = fb._7
1395- let dg = fb._8
1396- let fh = fb._9
1397- let dI = fb._10
1398- let fi = [fc, cV(cW, cX, 0)]
1399- let fj = dd(de, dV.payments, dg, 0)
1400- let fk = makeString_2C([ea[D], makeString(fd, "_"), makeString(fe, "_"), makeString_2C(ff, "_")], ":")
1401- let fl = aE(invoke(aB, "updateBackpack", [S, fk], nil))
1402- let fm = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fg, aj)], nil))
1403- $Tuple2((fi ++ fj), $Tuple5(dY, fh, fl, fm, dI))
1387+ else split_4C(eb[G], "_")
1388+ let fc = dn(do, cY, dp, dq, dr, ds)
1389+ let fd = fc._1
1390+ let fe = fc._2
1391+ let ff = fc._3
1392+ let fg = fc._4
1393+ let cX = fc._5
1394+ let df = fc._6
1395+ let fh = fc._7
1396+ let dh = fc._8
1397+ let fi = fc._9
1398+ let dJ = fc._10
1399+ let fj = [fd, cW(cX, cY, 0)]
1400+ let fk = de(df, dW.payments, dh, 0)
1401+ let fl = makeString_2C([eb[D], makeString(fe, "_"), makeString(ff, "_"), makeString_2C(fg, "_")], ":")
1402+ let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1403+ let fn = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fh, aj)], nil))
1404+ $Tuple2((fj ++ fk), $Tuple5(dZ, fi, fm, fn, dJ))
14041405 }
14051406 }
14061407
14071408
14081409
1409-@Callable(dV)
1410-func acceptShopOrderDuckDelivery (fn,dn) = if (!(ab))
1410+@Callable(dW)
1411+func acceptShopOrderDuckDelivery (fo,do) = if (!(ab))
14111412 then throw("Delivery feature is turned off!")
14121413 else {
1413- let dY = bD()
1414- let dc = dV.originCaller
1415- let cX = toString(dc)
1416- let S = valueOrErrorMessage(getString(aB, P(cX)), "You don't have a duck staked")
1417- let bB = R(S)
1418- let ea = bA(bB)
1419- let dp = split(ea[E], "_")
1420- let dq = split(ea[F], "_")
1421- let dr = if ((ea[G] == ""))
1414+ let dZ = bE()
1415+ let dd = dW.originCaller
1416+ let cY = toString(dd)
1417+ let S = valueOrErrorMessage(getString(aB, P(cY)), "You don't have a duck staked")
1418+ let bC = R(S)
1419+ let eb = bB(bC)
1420+ let dq = split(eb[E], "_")
1421+ let dr = split(eb[F], "_")
1422+ let ds = if ((eb[G] == ""))
14221423 then nil
1423- else split_4C(ea[G], "_")
1424- let fo = dm(dn, cX, fn, dp, dq, dr)
1425- let fc = fo._1
1426- let fd = fo._2
1427- let fe = fo._3
1428- let ff = fo._4
1429- let cW = fo._5
1430- let de = fo._6
1431- let fg = fo._7
1432- let dg = fo._8
1433- let fh = fo._9
1434- let dI = fo._10
1435- let fp = fraction((de + cW), aU, ai)
1436- let fq = if ((k > fp))
1424+ else split_4C(eb[G], "_")
1425+ let fp = dn(do, cY, fo, dq, dr, ds)
1426+ let fd = fp._1
1427+ let fe = fp._2
1428+ let ff = fp._3
1429+ let fg = fp._4
1430+ let cX = fp._5
1431+ let df = fp._6
1432+ let fh = fp._7
1433+ let dh = fp._8
1434+ let fi = fp._9
1435+ let dJ = fp._10
1436+ let fq = fraction((df + cX), aU, ai)
1437+ let fr = if ((k > fq))
14371438 then k
1438- else fp
1439- let dh = fraction(fq, de, (de + cW))
1440- let cY = (fq - dh)
1441- let ek = valueOrElse(getInteger(X), 0)
1442- let fi = [fc, cV(cW, cX, cY)]
1443- let fj = dd(de, dV.payments, dg, dh)
1444- let fk = makeString_2C([ea[D], makeString(fd, "_"), makeString(fe, "_"), makeString_2C(ff, "_")], ":")
1445- let fl = aE(invoke(aB, "updateBackpack", [S, fk], nil))
1446- let fm = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fg, aj)], nil))
1447- $Tuple2(((fi ++ fj) :+ IntegerEntry(X, (ek + fq))), $Tuple5(dY, fh, fl, fm, dI))
1439+ else fq
1440+ let di = fraction(fr, df, (df + cX))
1441+ let cZ = (fr - di)
1442+ let el = valueOrElse(getInteger(X), 0)
1443+ let fj = [fd, cW(cX, cY, cZ)]
1444+ let fk = de(df, dW.payments, dh, di)
1445+ let fl = makeString_2C([eb[D], makeString(fe, "_"), makeString(ff, "_"), makeString_2C(fg, "_")], ":")
1446+ let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1447+ let fn = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fh, aj)], nil))
1448+ $Tuple2(((fj ++ fk) :+ IntegerEntry(X, (el + fr))), $Tuple5(dZ, fi, fm, fn, dJ))
14481449 }
14491450
14501451
14511452
1452-@Callable(dV)
1453-func acceptShopOrderLandDelivery (fn,dn,fr) = if (!(ab))
1453+@Callable(dW)
1454+func acceptShopOrderLandDelivery (fo,do,fs) = if (!(ab))
14541455 then throw("Delivery feature is turned off!")
14551456 else {
1456- let dY = bD()
1457- let dc = dV.originCaller
1458- let cX = toString(dc)
1459- let em = value(assetInfo(fromBase58String(fr)))
1460- if (!(isDefined(getInteger(aB, M(fr)))))
1461- then throw((("NFT " + em.name) + " is not staked"))
1457+ let dZ = bE()
1458+ let dd = dW.originCaller
1459+ let cY = toString(dd)
1460+ let en = value(assetInfo(fromBase58String(fs)))
1461+ if (!(isDefined(getInteger(aB, M(fs)))))
1462+ then throw((("NFT " + en.name) + " is not staked"))
14621463 else {
1463- let en = valueOrErrorMessage(getString(aB, K(fr)), (("NFT " + em.name) + " is orphaned"))
1464- if ((en != cX))
1464+ let eo = valueOrErrorMessage(getString(aB, K(fs)), (("NFT " + en.name) + " is orphaned"))
1465+ if ((eo != cY))
14651466 then throw((e + " is not yours"))
14661467 else {
1467- let dx = aE(invoke(aB, "getWarehouseREADONLY", [fr], nil))
1468- let bW = split_4C(dx, ":")
1469- let cI = split(bW[x], "_")
1470- let cP = split(bW[y], "_")
1471- let eD = if ((bW[z] == ""))
1468+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [fs], nil))
1469+ let bX = split_4C(dy, ":")
1470+ let cJ = split(bX[x], "_")
1471+ let cQ = split(bX[y], "_")
1472+ let eE = if ((bX[z] == ""))
14721473 then nil
1473- else split(bW[z], "_")
1474- let fs = dm(dn, cX, fn, cI, cP, eD)
1475- let fc = fs._1
1476- let fd = fs._2
1477- let fe = fs._3
1478- let ff = fs._4
1479- let cW = fs._5
1480- let de = fs._6
1481- let fg = fs._7
1482- let dg = fs._8
1483- let fh = fs._9
1484- let dI = fs._10
1485- let fp = fraction((de + cW), aU, ai)
1486- let fq = if ((k > fp))
1474+ else split(bX[z], "_")
1475+ let ft = dn(do, cY, fo, cJ, cQ, eE)
1476+ let fd = ft._1
1477+ let fe = ft._2
1478+ let ff = ft._3
1479+ let fg = ft._4
1480+ let cX = ft._5
1481+ let df = ft._6
1482+ let fh = ft._7
1483+ let dh = ft._8
1484+ let fi = ft._9
1485+ let dJ = ft._10
1486+ let fq = fraction((df + cX), aU, ai)
1487+ let fr = if ((k > fq))
14871488 then k
1488- else fp
1489- let dh = fraction(fq, de, (de + cW))
1490- let cY = (fq - dh)
1491- let ek = valueOrElse(getInteger(X), 0)
1492- let fi = [fc, cV(cW, cX, cY)]
1493- let fj = dd(de, dV.payments, dg, dh)
1494- let dF = makeString_2C([bW[w], makeString(fd, "_"), makeString(fe, "_"), makeString(ff, "_"), bW[A]], ":")
1495- let dH = aE(invoke(aB, "saveWarehouse", [dF, fr], nil))
1496- let ef = aH(invoke(aB, "updateAccStats", [cX, fraction(d, fg, aj)], nil))
1497- $Tuple2(((fi ++ fj) :+ IntegerEntry(X, (ek + fq))), $Tuple5(dY, fh, dH, ef, dI))
1489+ else fq
1490+ let di = fraction(fr, df, (df + cX))
1491+ let cZ = (fr - di)
1492+ let el = valueOrElse(getInteger(X), 0)
1493+ let fj = [fd, cW(cX, cY, cZ)]
1494+ let fk = de(df, dW.payments, dh, di)
1495+ let dG = makeString_2C([bX[w], makeString(fe, "_"), makeString(ff, "_"), makeString(fg, "_"), bX[A]], ":")
1496+ let dI = aE(invoke(aB, "saveWarehouse", [dG, fs], nil))
1497+ let eg = aH(invoke(aB, "updateAccStats", [cY, fraction(d, fh, aj)], nil))
1498+ $Tuple2(((fj ++ fk) :+ IntegerEntry(X, (el + fr))), $Tuple5(dZ, fi, dI, eg, dJ))
14981499 }
14991500 }
15001501 }
15011502
15021503
15031504
1504-@Callable(dV)
1505-func sellProductsToES (cK) = {
1506- let dY = bD()
1507- if ((size(dV.payments) != 0))
1505+@Callable(dW)
1506+func sellProductsToES (cL) = {
1507+ let dZ = bE()
1508+ if ((size(dW.payments) != 0))
15081509 then throw("No payments needed")
15091510 else {
1510- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
1511- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
1512- if ((dZ[I] != "A"))
1513- then throw(("Duck location type should be Airport, but is " + dZ[I]))
1511+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1512+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1513+ if ((ea[I] != "A"))
1514+ then throw(("Duck location type should be Airport, but is " + ea[I]))
15141515 else {
1515- let ea = bA(R(S))
1516- let eD = if ((ea[G] == ""))
1516+ let eb = bB(R(S))
1517+ let eE = if ((eb[G] == ""))
15171518 then nil
1518- else split_4C(ea[G], "_")
1519- let ft = W()
1520- let fu = getString(ft)
1521- let fv = if (isDefined(fu))
1522- then split_4C(value(fu), "_")
1519+ else split_4C(eb[G], "_")
1520+ let fu = W()
1521+ let fv = getString(fu)
1522+ let fw = if (isDefined(fv))
1523+ then split_4C(value(fv), "_")
15231524 else nil
1524- func fw (bF,fx) = {
1525- let bH = bF._1
1526- let ez = if ((size(cK) > bH))
1527- then cK[bH]
1525+ func fx (bG,fy) = {
1526+ let bI = bG._1
1527+ let eA = if ((size(cL) > bI))
1528+ then cL[bI]
15281529 else 0
1529- if ((0 > ez))
1530+ if ((0 > eA))
15301531 then throw("Quantity cannot be negative")
15311532 else {
1532- let aa = split(fx, "_")
1533+ let aa = split(fy, "_")
15331534 if ((size(aa) != u))
1534- then throw(("Fatal: unknown recipe: " + fx))
1535+ then throw(("Fatal: unknown recipe: " + fy))
15351536 else {
1536- let fy = (i * v)
1537- let fz = if ((size(fv) > bH))
1538- then parseIntValue(fv[bH])
1537+ let fz = (i * v)
1538+ let fA = if ((size(fw) > bI))
1539+ then parseIntValue(fw[bI])
15391540 else 0
1540- let fA = (fy - fz)
1541- if ((ez > fA))
1542- then throw(((("Warehouse can buy only " + toString(fA)) + " of ") + o[bH]))
1541+ let fB = (fz - fA)
1542+ if ((eA > fB))
1543+ then throw(((("Warehouse can buy only " + toString(fB)) + " of ") + o[bI]))
15431544 else {
1544- let er = Z(aa)
1545- let fB = fraction((er * j), h, (aj * v))
1546- let fC = if ((size(eD) > bH))
1547- then parseIntValue(eD[bH])
1545+ let es = Z(aa)
1546+ let fC = fraction((es * j), h, (aj * v))
1547+ let fD = if ((size(eE) > bI))
1548+ then parseIntValue(eE[bI])
15481549 else 0
1549- if ((ez > fC))
1550- then throw(((("You have only " + toString(fC)) + " of ") + o[bH]))
1551- else $Tuple5((bH + 1), (bF._2 + (fB * ez)), (bF._3 :+ toString((fC - ez))), (bF._4 :+ toString((fz + ez))), (bF._5 + (er * ez)))
1550+ if ((eA > fD))
1551+ then throw(((("You have only " + toString(fD)) + " of ") + o[bI]))
1552+ else $Tuple5((bI + 1), (bG._2 + (fC * eA)), (bG._3 :+ toString((fD - eA))), (bG._4 :+ toString((fA + eA))), (bG._5 + (es * eA)))
15521553 }
15531554 }
15541555 }
15551556 }
15561557
1557- let eM = {
1558- let cj = r
1559- let ck = size(cj)
1560- let cl = $Tuple5(0, 0, nil, nil, 0)
1561- func cm (cn,co) = if ((co >= ck))
1562- then cn
1563- else fw(cn, cj[co])
1558+ let eN = {
1559+ let ck = r
1560+ let cl = size(ck)
1561+ let cm = $Tuple5(0, 0, nil, nil, 0)
1562+ func cn (co,cp) = if ((cp >= cl))
1563+ then co
1564+ else fx(co, ck[cp])
15641565
1565- func cp (cn,co) = if ((co >= ck))
1566- then cn
1566+ func cq (co,cp) = if ((cp >= cl))
1567+ then co
15671568 else throw("List size exceeds 50")
15681569
1569- 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)
1570+ cq(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cm, 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)
15701571 }
1571- let fk = makeString_2C([ea[D], ea[E], ea[F], makeString_2C(eM._3, "_")], ":")
1572- let fl = aE(invoke(aB, "updateBackpack", [S, fk], nil))
1573- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(c, eM._5, (aj * 10))], nil))
1574- $Tuple2([StringEntry(ft, makeString_2C(eM._4, "_")), ScriptTransfer(dV.caller, eM._2, ad)], $Tuple3(fl, dY, ef))
1572+ let fl = makeString_2C([eb[D], eb[E], eb[F], makeString_2C(eN._3, "_")], ":")
1573+ let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1574+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(c, eN._5, (aj * 10))], nil))
1575+ $Tuple2([StringEntry(fu, makeString_2C(eN._4, "_")), ScriptTransfer(dW.caller, eN._2, ad)], $Tuple3(fm, dZ, eg))
15751576 }
15761577 }
15771578 }
15781579
15791580
15801581
1581-@Callable(dV)
1582-func updateEsStorage (fD) = if ((dV.caller != aB))
1582+@Callable(dW)
1583+func updateEsStorage (fE) = if ((dW.caller != aB))
15831584 then throw("Permission denied")
1584- else $Tuple2([StringEntry(W(), fD)], fD)
1585+ else $Tuple2([StringEntry(W(), fE)], fE)
15851586
15861587
15871588
1588-@Callable(dV)
1589-func updateDeliveryLocked (fE) = if ((dV.caller != aB))
1589+@Callable(dW)
1590+func updateDeliveryLocked (fF) = if ((dW.caller != aB))
15901591 then throw("Permission denied")
1591- else $Tuple2([IntegerEntry(Y, fE)], fE)
1592+ else $Tuple2([IntegerEntry(Y, fF)], fF)
15921593
15931594
15941595
1595-@Callable(dV)
1596-func sendDeliveryReward (O) = if ((dV.caller != aB))
1596+@Callable(dW)
1597+func sendDeliveryReward (O) = if ((dW.caller != aB))
15971598 then throw("Permission denied")
15981599 else {
1599- let ek = valueOrElse(getInteger(X), 0)
1600- let fF = valueOrElse(getInteger(Y), 0)
1601- $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (ek - k)), IntegerEntry(Y, (fF - k))], k)
1600+ let el = valueOrElse(getInteger(X), 0)
1601+ let fG = valueOrElse(getInteger(Y), 0)
1602+ $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (el - k)), IntegerEntry(Y, (fG - k))], k)
16021603 }
16031604
16041605
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
102102 let Y = "deliveryLocked"
103103
104104 func Z (aa) = (parseIntValue(aa[s]) * q)
105105
106106
107107 let ab = true
108108
109109 let ac = take(drop(this.bytes, 1), 1)
110110
111111 let ad = {
112112 let ae = ac
113113 if ((base58'2W' == ae))
114114 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
115115 else if ((base58'2T' == ae))
116116 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
117117 else throw("Unknown chain")
118118 }
119119
120120 let af = {
121121 let ae = ac
122122 if ((base58'2W' == ae))
123123 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
124124 else if ((base58'2T' == ae))
125125 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
126126 else throw("Unknown chain")
127127 }
128128
129129 let ag = "__"
130130
131131 let ah = 100000
132132
133133 let ai = 1000000
134134
135135 let aj = 100000000
136136
137137 let ak = 10000000000
138138
139139 let al = 100000
140140
141141 let am = [0, 1, 2, 3, 4, 5]
142142
143143 func an (ao,ap) = valueOrErrorMessage(getString(ao, ap), makeString(["mandatory ", toString(ao), ".", ap, " is not defined"], ""))
144144
145145
146146 let aq = 1
147147
148148 let ar = 6
149149
150150 let as = 8
151151
152152 func at () = "%s__restConfig"
153153
154154
155155 func au () = "%s__restAddr"
156156
157157
158158 func av (aw) = split_4C(an(aw, at()), ag)
159159
160160
161161 func ax (ay,az) = valueOrErrorMessage(addressFromString(ay[az]), ("Rest cfg doesn't contain address at index " + toString(az)))
162162
163163
164164 let aA = addressFromStringValue(valueOrElse(getString(this, au()), af))
165165
166166 let ay = av(aA)
167167
168168 let aB = ax(ay, aq)
169169
170170 let aC = ax(ay, ar)
171171
172172 let aD = ax(ay, as)
173173
174174 func aE (aF) = {
175175 let ae = aF
176176 if ($isInstanceOf(ae, "String"))
177177 then {
178178 let aG = ae
179179 aG
180180 }
181181 else throw("fail to cast into String")
182182 }
183183
184184
185185 func aH (aF) = {
186186 let ae = aF
187187 if ($isInstanceOf(ae, "Int"))
188188 then {
189189 let aI = ae
190190 aI
191191 }
192192 else throw("fail to cast into Int")
193193 }
194194
195195
196196 func aJ () = "contractsBlocked"
197197
198198
199199 func aK (aL,aM) = {
200200 let aN = pow(10, 0, aM, 0, 0, DOWN)
201201 let aO = toString((aL % aN))
202202 let aP = drop(toString(aN), (1 + size(aO)))
203203 (((toString((aL / aN)) + ".") + aP) + aO)
204204 }
205205
206206
207207 let aQ = 10000000000
208208
209209 let aR = 200
210210
211211 let aS = 300
212212
213213 let aT = 10000
214214
215215 let aU = 10000
216216
217217 let aV = 15000
218218
219219 func aW (aX,aY) = ((("factoryWhByContinentAndRes_" + aX) + "_") + toString(aY))
220220
221221
222222 let aZ = 0
223223
224224 let ba = 1
225225
226226 let bb = 2
227227
228228 func bc (bd) = {
229229 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:"), ":")
230230 [if ((size(split(be[aZ], "_")) == f))
231231 then be[aZ]
232232 else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(be[ba], "_")) == f))
233233 then be[ba]
234234 else "0@0_0@0_0@0_0@0_0@0_0@0", be[bb]]
235235 }
236236
237237
238238 func bf (bg,bh,bi) = if (bi)
239239 then {
240240 let bj = if ((bg >= 0))
241241 then (((bg + bh) - 1) / bh)
242242 else -((((-(bg) + bh) - 1) / bh))
243243 (bj * aj)
244244 }
245245 else bg
246246
247247
248248 func bk (bl,aY,bg,bm) = {
249249 let bn = aW(bl, aY)
250250 let bo = valueOrElse(getInteger(bn), 0)
251251 let bp = if ((bo > aQ))
252252 then 0
253253 else if (((bo + bg) > aQ))
254254 then (aQ - bo)
255255 else bg
256256 let bq = (fraction(bp, ((aR * h) - fraction(((100 * bo) + (50 * bp)), h, aQ)), ak) + fraction((bg - bp), h, aj))
257257 let br = (bm - (bm / 100))
258258 if (((br * bg) > (bq * aj)))
259259 then throw((((((((((("Actual price = " + toString(bq)) + " / ") + toString(bg)) + " < minPrice = ") + toString(bm)) + ", (") + bl) + ", ") + m[aY]) + ")"))
260260 else $Tuple2(IntegerEntry(bn, (bo + bg)), bq)
261261 }
262262
263263
264264 func bs (bl,bt,bg,bu) = {
265265 let bn = aW(bl, bt)
266266 let bo = valueOrElse(getInteger(bn), 0)
267267 let bv = if ((bo > aQ))
268268 then min([bg, (bo - aQ)])
269269 else 0
270270 let bw = min([bo, (bg - bv)])
271271 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)
272+ let by = min([bo, aQ])
273+ let bz = (fraction(bw, ((aS * h) - fraction(((100 * by) - (50 * bw)), h, aQ)), ak) + fraction(bv, (2 * h), aj))
274+ let bA = (bu + (bu / 100))
275+ if (((bz * aj) > (bA * bx)))
276+ then throw((((((((((("Actual price = " + toString(bz)) + " / ") + toString(bx)) + " > maxPrice = ") + toString(bu)) + ", (") + bl) + ", ") + n[bt]) + ")"))
277+ else $Tuple3(IntegerEntry(bn, (bo - bx)), bz, bx)
277278 }
278279
279280
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:"), ":")
281+func bB (bC) = {
282+ let be = split_4C(valueOrElse(getString(aB, bC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
282283 [toString(valueOrElse(parseInt(be[D]), 0)), if ((size(split(be[E], "_")) == f))
283284 then be[E]
284285 else "0_0_0_0_0_0", if ((size(split(be[F], "_")) == f))
285286 then be[F]
286287 else "0_0_0_0_0_0", be[G]]
287288 }
288289
289290
290-func bC () = if (valueOrElse(getBoolean(aB, aJ()), false))
291+func bD () = if (valueOrElse(getBoolean(aB, aJ()), false))
291292 then throw("Contracts are under maintenance")
292293 else unit
293294
294295
295-func bD () = aH(invoke(aB, "saveLastTx", nil, nil))
296+func bE () = aH(invoke(aB, "saveLastTx", nil, nil))
296297
297298
298-func bE (bF,bG) = {
299- let bH = bF._1
300- let bI = if ((size(bF._10) > bH))
301- then bF._10[bH]
299+func bF (bG,bH) = {
300+ let bI = bG._1
301+ let bJ = if ((size(bG._10) > bI))
302+ then bG._10[bI]
302303 else "0@0"
303- let bJ = bF._8
304- let bK = split(bI, "@")
305- if ((size(bK) != 2))
304+ let bK = bG._8
305+ let bL = split(bJ, "@")
306+ if ((size(bL) != 2))
306307 then throw("Incorrect order format, should be amount@price")
307308 else {
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])
309+ let bM = parseIntValue(bL[0])
310+ let bN = parseIntValue(bL[1])
311+ let bO = if (bK)
312+ then (bM * bN)
313+ else fraction(bM, bN, aj)
314+ let bP = bf(bM, v, bK)
315+ let bQ = if ((size(bG._6) > bI))
316+ then parseIntValue(bG._6[bI])
316317 else 0
317- let bQ = split(if ((size(bF._7) > bH))
318- then bF._7[bH]
318+ let bR = split(if ((size(bG._7) > bI))
319+ then bG._7[bI]
319320 else "0@0", "@")
320- let bR = parseIntValue(bQ[0])
321- let bS = parseIntValue(bQ[1])
322- if (if ((0 > bS))
321+ let bS = parseIntValue(bR[0])
322+ let bT = parseIntValue(bR[1])
323+ if (if ((0 > bT))
323324 then true
324- else (0 > bM))
325+ else (0 > bN))
325326 then throw("Price can't be negative")
326327 else {
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))
328+ let bU = if (bK)
329+ then (bS * bT)
330+ else fraction(bS, bT, aj)
331+ if ((bM == 0))
332+ then if ((bS > 0))
333+ then $Tuple10((bI + 1), (bG._2 :+ toString(bQ)), bG._3, bG._4, (bG._5 - bU), bG._6, bG._7, bK, (bG._9 + bf(bQ, v, bK)), bG._10)
334+ else $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bS))), bG._3, bG._4, bG._5, bG._6, bG._7, bK, (bG._9 + bf((bQ - bS), v, bK)), bG._10)
335+ else if ((bM > 0))
336+ then if ((0 > bS))
337+ then $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bS))), (bG._3 + bP), bG._4, (bG._5 + bO), bG._6, bG._7, bK, bf((bQ - bS), v, bK), bG._10)
338+ else $Tuple10((bI + 1), (bG._2 :+ toString(bQ)), (bG._3 + bP), bG._4, ((bG._5 + bO) - bU), bG._6, bG._7, bK, bf(bQ, v, bK), bG._10)
339+ else if ((0 > bS))
339340 then {
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)
341+ let bV = (bS - bM)
342+ if ((0 > (bQ - bV)))
343+ then throw((((("Attempt to take " + toString(bV)) + " from warehouse, but only ") + toString(bQ)) + " available"))
344+ else $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bV))), bG._3, (bG._4 - bP), bG._5, bG._6, bG._7, bK, bf((bQ - bV), v, bK), bG._10)
344345 }
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)
346+ else if ((0 > (bQ + bM)))
347+ then throw((((("Attempt to take " + toString(-(bM))) + " from warehouse, but only ") + toString(bQ)) + " available"))
348+ else $Tuple10((bI + 1), (bG._2 :+ toString((bQ + bM))), bG._3, (bG._4 - bP), (bG._5 - bU), bG._6, bG._7, bK, bf((bQ + bM), v, bK), bG._10)
348349 }
349350 }
350351 }
351352
352353
353-func bV (bW,bX,bY) = {
354- let bZ = split(bW[x], "_")
355- let ca = split(bW[y], "_")
356- let cb = if ((bW[z] == ""))
354+func bW (bX,bY,bZ) = {
355+ let ca = split(bX[x], "_")
356+ let cb = split(bX[y], "_")
357+ let cc = if ((bX[z] == ""))
357358 then nil
358- else split_4C(bW[z], "_")
359- let cc = split(bX[aZ], "_")
360- let cd = split(bX[ba], "_")
361- let ce = if ((bX[bb] == ""))
359+ else split_4C(bX[z], "_")
360+ let cd = split(bY[aZ], "_")
361+ let ce = split(bY[ba], "_")
362+ let cf = if ((bY[bb] == ""))
362363 then nil
363- else split_4C(bX[bb], "_")
364- if ((size(bY) != 3))
364+ else split_4C(bY[bb], "_")
365+ if ((size(bZ) != 3))
365366 then throw("newOrderStr should contain exactly 2 ':' separators")
366367 else {
367- let cf = split(bY[0], "_")
368- let cg = split(bY[1], "_")
369- let ch = if ((bY[2] == ""))
368+ let cg = split(bZ[0], "_")
369+ let ch = split(bZ[1], "_")
370+ let ci = if ((bZ[2] == ""))
370371 then nil
371- else split_4C(bY[2], "_")
372- if ((size(cf) != f))
372+ else split_4C(bZ[2], "_")
373+ if ((size(cg) != f))
373374 then throw("All 6 resources should be passed")
374- else if ((size(cg) != f))
375+ else if ((size(ch) != f))
375376 then throw("All 6 materials should be passed")
376377 else {
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])
378+ let cj = {
379+ let ck = m
380+ let cl = size(ck)
381+ let cm = $Tuple10(0, nil, 0, 0, 0, ca, cd, false, 0, cg)
382+ func cn (co,cp) = if ((cp >= cl))
383+ then co
384+ else bF(co, ck[cp])
384385
385- func cp (cn,co) = if ((co >= ck))
386- then cn
386+ func cq (co,cp) = if ((cp >= cl))
387+ then co
387388 else throw("List size exceeds 6")
388389
389- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
390+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
390391 }
391392 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])
393+ let ck = n
394+ let cl = size(ck)
395+ let cm = $Tuple10(0, nil, cj._3, cj._4, cj._5, cb, ce, false, cj._9, ch)
396+ func cr (co,cp) = if ((cp >= cl))
397+ then co
398+ else bF(co, ck[cp])
398399
399- func cr (cn,co) = if ((co >= ck))
400- then cn
400+ func cs (co,cp) = if ((cp >= cl))
401+ then co
401402 else throw("List size exceeds 6")
402403
403- cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
404+ cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
404405 }
405406 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])
407+ let ck = o
408+ let cl = size(ck)
409+ let cm = $Tuple10(0, nil, bx._3, bx._4, bx._5, cc, cf, true, bx._9, ci)
410+ func ct (co,cp) = if ((cp >= cl))
411+ then co
412+ else bF(co, ck[cp])
412413
413- func ct (cn,co) = if ((co >= ck))
414- then cn
414+ func cu (co,cp) = if ((cp >= cl))
415+ then co
415416 else throw("List size exceeds 50")
416417
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)
418+ cu(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(cm, 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)
418419 }
419- $Tuple7(ci._2, bx._2, be._2, be._3, be._4, be._5, be._9)
420+ $Tuple7(cj._2, bx._2, be._2, be._3, be._4, be._5, be._9)
420421 }
421422 }
422423 }
423424
424425
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))
426+func cv (bG,cw) = {
427+ let bI = bG._7
428+ let bK = bG._12
429+ let cx = split(cw, "@")
430+ if ((size(cx) != 2))
430431 then throw("Incorrect order format, should be amount@price")
431432 else {
432- let cx = parseIntValue(cw[0])
433- let cy = parseIntValue(cw[1])
434- if ((0 > cy))
433+ let cy = parseIntValue(cx[0])
434+ let cz = parseIntValue(cx[1])
435+ if ((0 > cz))
435436 then throw("Price can't be negative")
436437 else {
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])
438+ let cA = if (bK)
439+ then (cy * cz)
440+ else fraction(cy, cz, aj)
441+ let cB = if ((size(bG._8) > bI))
442+ then parseIntValue(bG._8[bI])
442443 else 0
443- let bP = if ((size(bF._9) > bH))
444- then parseIntValue(bF._9[bH])
444+ let bQ = if ((size(bG._9) > bI))
445+ then parseIntValue(bG._9[bI])
445446 else 0
446- let cB = if ((size(bF._10) > bH))
447- then bF._10[bH]
447+ let cC = if ((size(bG._10) > bI))
448+ then bG._10[bI]
448449 else "0@0"
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)
450+ let cD = split(cC, "@")
451+ let cE = parseIntValue(cD[0])
452+ let cF = parseIntValue(cD[1])
453+ if (if ((cy != 0))
454+ then (cz != cF)
454455 else false)
455- then throw(((((("Prices of " + bF._11[bH]) + " don't match! WH price=") + toString(cE)) + ", your price=") + toString(cy)))
456+ then throw(((((("Prices of " + bG._11[bI]) + " don't match! WH price=") + toString(cF)) + ", your price=") + toString(cz)))
456457 else {
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"))
458+ let cG = if (bK)
459+ then (cE * cF)
460+ else fraction(cE, cF, aj)
461+ let cH = bf(cy, v, bK)
462+ if ((cy == 0))
463+ then $Tuple13((bG._1 :+ toString(bQ)), (bG._2 :+ cC), (bG._3 :+ toString(cB)), bG._4, bG._5, bG._6, (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, bG._13)
464+ else if ((cy > 0))
465+ then if ((0 > cE))
466+ then if ((cy > -(cE)))
467+ then throw(((((("Attempt to buy " + toString(cy)) + " of ") + bG._11[bI]) + ", but warehouse only sells ") + toString(-(cE))))
468+ else $Tuple13((bG._1 :+ toString(bQ)), (bG._2 :+ ((toString((cE + cy)) + "@") + toString(cF))), (bG._3 :+ toString((cB + cy))), (bG._4 + cH), bG._5, (bG._6 + cA), (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, (bG._13 + (if (bK)
469+ then (cy * aj)
470+ else cy)))
471+ else throw((("Attempt to buy " + bG._11[bI]) + " while warehouse doesn't sell it"))
472+ else if ((cE > 0))
473+ then if ((-(cy) > cE))
474+ then throw(((((("Attempt to sell " + toString(-(cy))) + " of ") + bG._11[bI]) + ", but warehouse only buys ") + toString(cE)))
475+ else if ((-(cy) > cB))
476+ then throw(((((("Attempt to sell " + toString(-(cy))) + ", but you only have ") + toString(cB)) + " of ") + bG._11[bI]))
477+ else $Tuple13((bG._1 :+ toString((bQ - cy))), (bG._2 :+ ((toString((cE + cy)) + "@") + toString(cF))), (bG._3 :+ toString((cB + cy))), (bG._4 - cH), (bG._5 - cA), bG._6, (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, (bG._13 - (if (bK)
478+ then (cy * aj)
479+ else cy)))
480+ else throw((("Attempt to sell " + bG._11[bI]) + " while warehouse doesn't buy it"))
480481 }
481482 }
482483 }
483484 }
484485
485486
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))
487+func cI (cJ,cK,cL,cM) = {
488+ func cN (bG,bI) = if ((cL[bI] > parseIntValue(cJ[bI])))
489+ then throw(((((("You have " + cJ[bI]) + " of ") + m[bI]) + ", but tried to sell ") + toString(cL[bI])))
490+ else if ((0 > cL[bI]))
491+ then throw(((("You tried to sell negative amount of " + m[bI]) + ": ") + toString(cL[bI])))
492+ else if ((cL[bI] > 0))
492493 then {
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]))
494+ let cO = bk(cK, bI, cL[bI], cM[bI])
495+ $Tuple4((bG._1 :+ cO._1), (bG._2 :+ toString((parseIntValue(cJ[bI]) - cL[bI]))), (bG._3 + cO._2), (bG._4 + cL[bI]))
495496 }
496- else $Tuple4(bF._1, (bF._2 :+ cI[bH]), bF._3, bF._4)
497+ else $Tuple4(bG._1, (bG._2 :+ cJ[bI]), bG._3, bG._4)
497498
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])
499+ let ck = am
500+ let cl = size(ck)
501+ let cm = $Tuple4(nil, nil, 0, 0)
502+ func cn (co,cp) = if ((cp >= cl))
503+ then co
504+ else cN(co, ck[cp])
504505
505- func cp (cn,co) = if ((co >= ck))
506- then cn
506+ func cq (co,cp) = if ((cp >= cl))
507+ then co
507508 else throw("List size exceeds 6")
508509
509- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
510+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
510511 }
511512
512513
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))
514+func cP (cQ,cK,cL,cR) = {
515+ func cS (bG,bI) = if ((0 > cL[bI]))
516+ then throw(((("You tried to buy negative amount of " + n[bI]) + ": ") + toString(cL[bI])))
517+ else if ((cL[bI] > 0))
517518 then {
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]))
519+ let cO = bs(cK, bI, cL[bI], cR[bI])
520+ $Tuple4((bG._1 :+ cO._1), (bG._2 :+ toString((parseIntValue(cQ[bI]) + cO._3))), (bG._3 + cO._2), (bG._4 + cL[bI]))
520521 }
521- else $Tuple4(bF._1, (bF._2 :+ cP[bH]), bF._3, bF._4)
522+ else $Tuple4(bG._1, (bG._2 :+ cQ[bI]), bG._3, bG._4)
522523
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])
524+ let ck = am
525+ let cl = size(ck)
526+ let cm = $Tuple4(nil, nil, 0, 0)
527+ func cn (co,cp) = if ((cp >= cl))
528+ then co
529+ else cS(co, ck[cp])
529530
530- func cp (cn,co) = if ((co >= ck))
531- then cn
531+ func cq (co,cp) = if ((cp >= cl))
532+ then co
532533 else throw("List size exceeds 6")
533534
534- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
535+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
535536 }
536537
537538
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)
539+func cT (cJ,cQ,cL) = {
540+ func cU (bG,bI) = {
541+ let cV = cL[bI]
542+ if ((cV > parseIntValue(cJ[bI])))
543+ then throw(((((("You have " + cJ[bI]) + " of ") + m[bI]) + ", but tried to exchange ") + toString(cV)))
544+ else if ((0 > cV))
545+ then throw(((("You tried to exchange negative amount of " + m[bI]) + ": ") + toString(cV)))
546+ else if ((cV > 0))
547+ then $Tuple4((bG._1 :+ toString((parseIntValue(cJ[bI]) - cV))), (bG._2 :+ toString((parseIntValue(cQ[bI]) + cV))), (bG._3 + fraction(cV, h, aj)), (bG._4 + cV))
548+ else $Tuple4((bG._1 :+ cJ[bI]), (bG._2 :+ cQ[bI]), bG._3, bG._4)
548549 }
549550
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])
551+ let ck = am
552+ let cl = size(ck)
553+ let cm = $Tuple4(nil, nil, 0, 0)
554+ func cn (co,cp) = if ((cp >= cl))
555+ then co
556+ else cU(co, ck[cp])
556557
557- func cp (cn,co) = if ((co >= ck))
558- then cn
558+ func cq (co,cp) = if ((cp >= cl))
559+ then co
559560 else throw("List size exceeds 6")
560561
561- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
562+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
562563 }
563564
564565
565-func cV (cW,cX,cY) = if ((cW > 0))
566+func cW (cX,cY,cZ) = if ((cX > 0))
566567 then {
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)))
568+ let da = fraction(cX, aT, ai)
569+ if ((cZ >= (cX - (3 * da))))
570+ then throw(("This trade does not cover delivery cost of " + aK(cZ, 6)))
570571 else {
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))
572+ let db = N(cY)
573+ let dc = getString(aB, db)
574+ let dd = addressFromStringValue(cY)
575+ (((if (isDefined(dc))
576+ then [ScriptTransfer(addressFromStringValue(value(dc)), da, ad)]
577+ else nil) :+ ScriptTransfer(dd, ((cX - (3 * da)) - cZ), ad)) :+ ScriptTransfer(aA, da, ad))
577578 }
578579 }
579580 else nil
580581
581582
582-func dd (de,df,dg,dh) = if ((de > 0))
583- then if ((size(df) != 1))
583+func de (df,dg,dh,di) = if ((df > 0))
584+ then if ((size(dg) != 1))
584585 then throw("exactly 1 payment must be attached")
585586 else {
586- let di = df[0]
587- let dj = di.amount
588- if (if (!(isDefined(di.assetId)))
587+ let dj = dg[0]
588+ let dk = dj.amount
589+ if (if (!(isDefined(dj.assetId)))
589590 then true
590- else (value(di.assetId) != ad))
591+ else (value(dj.assetId) != ad))
591592 then throw("USDT payments only!")
592593 else {
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))
594+ let dl = (df + di)
595+ if ((dk != dl))
596+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(df, 6)) + "+") + aK(di, 6)) + "(delivery fee)"))
597+ else if ((al > df))
597598 then throw(("Min shop trade is " + aK(al, 6)))
598599 else {
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))
600+ let dm = fraction(df, aT, ai)
601+ let db = N(dh)
602+ let dc = getString(aB, db)
603+ (((if (isDefined(dc))
604+ then [ScriptTransfer(addressFromStringValue(value(dc)), dm, ad)]
605+ else nil) :+ ScriptTransfer(addressFromStringValue(dh), (df - (3 * dm)), ad)) :+ ScriptTransfer(aA, dm, ad))
605606 }
606607 }
607608 }
608- else if ((size(df) != 0))
609+ else if ((size(dg) != 0))
609610 then throw("No payments needed")
610611 else nil
611612
612613
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"))
614+func dn (do,cY,dp,dq,dr,ds) = {
615+ let dt = value(assetInfo(fromBase58String(do)))
616+ if (!(isDefined(getInteger(aB, M(do)))))
617+ then throw((("NFT " + dt.name) + " is not staked"))
617618 else {
618- let dg = valueOrErrorMessage(getString(aB, K(dn)), (("NFT " + ds.name) + " is orphaned"))
619- if ((dg == cX))
619+ let dh = valueOrErrorMessage(getString(aB, K(do)), (("NFT " + dt.name) + " is orphaned"))
620+ if ((dh == cY))
620621 then throw("You cannot trade with yourself")
621622 else {
622- let dt = split_4C(do, ":")
623- if ((size(dt) != 3))
623+ let du = split_4C(dp, ":")
624+ if ((size(du) != 3))
624625 then throw("bpOrderStr should contain exactly 2 ':' separators")
625626 else {
626- let du = split(dt[0], "_")
627- let dv = split(dt[1], "_")
628- let dw = if ((dt[2] == ""))
627+ let dv = split(du[0], "_")
628+ let dw = split(du[1], "_")
629+ let dx = if ((du[2] == ""))
629630 then nil
630- else split_4C(dt[2], "_")
631- if ((size(du) != f))
631+ else split_4C(du[2], "_")
632+ if ((size(dv) != f))
632633 then throw("All 6 resources should be passed")
633- else if ((size(dv) != f))
634+ else if ((size(dw) != f))
634635 then throw("All 6 materials should be passed")
635636 else {
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] == ""))
637+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [do], nil))
638+ let bX = split_4C(dy, ":")
639+ let ca = split(bX[x], "_")
640+ let cb = split(bX[y], "_")
641+ let cc = if ((bX[z] == ""))
641642 then nil
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] == ""))
643+ else split_4C(bX[z], "_")
644+ let dz = parseIntValue(split(bX[A], "_")[B])
645+ let bd = U(do)
646+ let dA = bc(bd)
647+ let dB = split(dA[aZ], "_")
648+ let dC = split(dA[ba], "_")
649+ let dD = if ((dA[bb] == ""))
649650 then nil
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])
651+ else split_4C(dA[bb], "_")
652+ let cj = {
653+ let ck = dv
654+ let cl = size(ck)
655+ let cm = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dq, ca, dB, m, false, 0)
656+ func cn (co,cp) = if ((cp >= cl))
657+ then co
658+ else cv(co, ck[cp])
658659
659- func cp (cn,co) = if ((co >= ck))
660- then cn
660+ func cq (co,cp) = if ((cp >= cl))
661+ then co
661662 else throw("List size exceeds 6")
662663
663- cp(cm(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5), 6)
664+ cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
664665 }
665666 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])
667+ let ck = dw
668+ let cl = size(ck)
669+ let cm = $Tuple13(nil, nil, nil, cj._4, cj._5, cj._6, 0, dr, cb, dC, n, false, cj._13)
670+ func cr (co,cp) = if ((cp >= cl))
671+ then co
672+ else cv(co, ck[cp])
672673
673- func cr (cn,co) = if ((co >= ck))
674- then cn
674+ func cs (co,cp) = if ((cp >= cl))
675+ then co
675676 else throw("List size exceeds 6")
676677
677- cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
678+ cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
678679 }
679- let be = if ((size(dw) != 0))
680+ let be = if ((size(dx) != 0))
680681 then {
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])
682+ let ck = dx
683+ let cl = size(ck)
684+ let cm = $Tuple13(nil, nil, nil, bx._4, bx._5, bx._6, 0, ds, cc, dD, o, true, bx._13)
685+ func ct (co,cp) = if ((cp >= cl))
686+ then co
687+ else cv(co, ck[cp])
687688
688- func ct (cn,co) = if ((co >= ck))
689- then cn
689+ func cu (co,cp) = if ((cp >= cl))
690+ then co
690691 else throw("List size exceeds 50")
691692
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)
693+ cu(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(cm, 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)
693694 }
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)))
695+ else $Tuple13(cc, dD, ds, bx._4, bx._5, bx._6, 0, ds, cc, dD, o, true, bx._13)
696+ let dE = be._4
697+ let dF = if ((0 > (dz - dE)))
697698 then 0
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)
699+ else (dz - dE)
700+ let dG = makeString_2C([bX[w], makeString(cj._1, "_"), makeString(bx._1, "_"), makeString_2C(be._1, "_"), toString(dF)], ":")
701+ let dH = makeString_2C([makeString(cj._2, "_"), makeString(bx._2, "_"), makeString_2C(be._2, "_")], ":")
702+ let dI = aE(invoke(aB, "saveWarehouse", [dG, do], nil))
703+ let dJ = aH(invoke(aB, "updateAccStats", [dh, fraction(d, be._13, aj)], nil))
704+ $Tuple10(StringEntry(bd, dH), cj._3, bx._3, be._3, be._5, be._6, be._13, dh, dI, dJ)
704705 }
705706 }
706707 }
707708 }
708709 }
709710
710711
711-func dJ (bg) = {
712- let dK = (bg / 30)
713- let dL = [dK, dK, dK, dK, dK, dK]
714- let aG = toString(dK)
715- let cI = [aG, aG, aG, aG, aG, aG]
716- let cL = [0, 0, 0, 0, 0, 0]
717- func dM (bF,dN) = {
718- let dO = cH(cI, dN, dL, cL)
719- $Tuple3((bF._1 ++ dO._1), (bF._2 + dO._3), (bF._3 + dO._4))
712+func dK (bg) = {
713+ let dL = (bg / 30)
714+ let dM = [dL, dL, dL, dL, dL, dL]
715+ let aG = toString(dL)
716+ let cJ = [aG, aG, aG, aG, aG, aG]
717+ let cM = [0, 0, 0, 0, 0, 0]
718+ func dN (bG,dO) = {
719+ let dP = cI(cJ, dO, dM, cM)
720+ $Tuple3((bG._1 ++ dP._1), (bG._2 + dP._3), (bG._3 + dP._4))
720721 }
721722
722- let dP = {
723- let cj = p
724- let ck = size(cj)
725- let cl = $Tuple3(nil, 0, 0)
726- func cm (cn,co) = if ((co >= ck))
727- then cn
728- else dM(cn, cj[co])
723+ let dQ = {
724+ let ck = p
725+ let cl = size(ck)
726+ let cm = $Tuple3(nil, 0, 0)
727+ func cn (co,cp) = if ((cp >= cl))
728+ then co
729+ else dN(co, ck[cp])
729730
730- func cp (cn,co) = if ((co >= ck))
731- then cn
731+ func cq (co,cp) = if ((cp >= cl))
732+ then co
732733 else throw("List size exceeds 5")
733734
734- cp(cm(cm(cm(cm(cm(cl, 0), 1), 2), 3), 4), 5)
735+ cq(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5)
735736 }
736- let dQ = dP._1
737- let bq = dP._2
738- let dR = dP._3
739- let dS = fraction(bq, aU, ai)
740- let dT = (bq / 100)
741- let dU = ((bq - dT) - dS)
742- $Tuple5(dQ, dU, dS, dT, dR)
737+ let dR = dQ._1
738+ let bq = dQ._2
739+ let dS = dQ._3
740+ let dT = fraction(bq, aU, ai)
741+ let dU = (bq / 100)
742+ let dV = ((bq - dU) - dT)
743+ $Tuple5(dR, dV, dT, dU, dS)
743744 }
744745
745746
746-@Callable(dV)
747-func recalcLockedVolumeREADONLY (V,dx) = {
748- let bX = bc(U(V))
749- let dW = bV(dx, bX, bX)
750- $Tuple2(nil, (dW._4 + dW._5))
747+@Callable(dW)
748+func recalcLockedVolumeREADONLY (V,dy) = {
749+ let bY = bc(U(V))
750+ let dX = bW(dy, bY, bY)
751+ $Tuple2(nil, (dX._4 + dX._5))
751752 }
752753
753754
754755
755-@Callable(dV)
756-func constructorV1 (dX) = if ((dV.caller != this))
756+@Callable(dW)
757+func constructorV1 (dY) = if ((dW.caller != this))
757758 then throw("Permission denied")
758- else [StringEntry(au(), dX)]
759+ else [StringEntry(au(), dY)]
759760
760761
761762
762-@Callable(dV)
763-func sellResources (cK,cL) = {
764- let dY = bD()
765- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
766- if ((size(dV.payments) != 0))
763+@Callable(dW)
764+func sellResources (cL,cM) = {
765+ let dZ = bE()
766+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
767+ if ((size(dW.payments) != 0))
767768 then throw("sellResources doesn't require any payments")
768769 else {
769- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
770- if ((dZ[I] != "F"))
771- then throw(("Duck location type should be Factory, but is " + dZ[I]))
770+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
771+ if ((ea[I] != "F"))
772+ then throw(("Duck location type should be Factory, but is " + ea[I]))
772773 else {
773- let ea = bA(R(S))
774- let cI = split(ea[E], "_")
775- let eb = cH(cI, dZ[J], cK, cL)
776- let dQ = eb._1
777- let ec = eb._2
778- let bq = eb._3
779- let dR = eb._4
780- let dT = (bq / 100)
781- let ed = makeString_2C([ea[D], makeString(ec, "_"), ea[F], ea[G]], ":")
782- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
783- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dR, aj)], nil))
784- $Tuple2(((dQ :+ ScriptTransfer(dV.caller, (bq - dT), ad)) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(ee, dY, ef))
774+ let eb = bB(R(S))
775+ let cJ = split(eb[E], "_")
776+ let ec = cI(cJ, ea[J], cL, cM)
777+ let dR = ec._1
778+ let ed = ec._2
779+ let bq = ec._3
780+ let dS = ec._4
781+ let dU = (bq / 100)
782+ let ee = makeString_2C([eb[D], makeString(ed, "_"), eb[F], eb[G]], ":")
783+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
784+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
785+ $Tuple2(((dR :+ ScriptTransfer(dW.caller, (bq - dU), ad)) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
785786 }
786787 }
787788 }
788789
789790
790791
791-@Callable(dV)
792-func sellResourcesWorld (O,bg) = if ((dV.caller != aD))
792+@Callable(dW)
793+func sellResourcesWorld (O,bg) = if ((dW.caller != aD))
793794 then throw("Permission denied")
794795 else {
795- let eg = dJ(bg)
796- let dQ = eg._1
797- let dU = eg._2
798- let dS = eg._3
799- let dT = eg._4
800- let dR = eg._5
801- if ((0 >= dU))
802- then throw(("This trade does not cover delivery cost of " + aK(dS, 6)))
796+ let eh = dK(bg)
797+ let dR = eh._1
798+ let dV = eh._2
799+ let dT = eh._3
800+ let dU = eh._4
801+ let dS = eh._5
802+ if ((0 >= dV))
803+ then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
803804 else {
804- let ef = aH(invoke(aB, "updateAccStats", [O, fraction(a, dR, aj)], nil))
805- $Tuple2((((dQ :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + dS))) :+ ScriptTransfer(aA, dT, ad)) :+ ScriptTransfer(aC, dU, ad)), $Tuple2(dU, ef))
805+ let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
806+ $Tuple2((((dR :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + dT))) :+ ScriptTransfer(aA, dU, ad)) :+ ScriptTransfer(aC, dV, ad)), $Tuple2(dV, eg))
806807 }
807808 }
808809
809810
810811
811-@Callable(dV)
812+@Callable(dW)
812813 func sellResourcesWorldREADONLY (bg) = {
813- let dU = dJ(bg)._2
814- $Tuple2(nil, dU)
814+ let dV = dK(bg)._2
815+ $Tuple2(nil, dV)
815816 }
816817
817818
818819
819-@Callable(dV)
820-func sellResourcesDuckDelivery (cK,cL,eh) = if (!(ab))
820+@Callable(dW)
821+func sellResourcesDuckDelivery (cL,cM,ei) = if (!(ab))
821822 then throw("Delivery feature is turned off!")
822823 else {
823- let dY = bD()
824- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
825- if ((size(dV.payments) != 0))
824+ let dZ = bE()
825+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
826+ if ((size(dW.payments) != 0))
826827 then throw("sellResources doesn't require any payments")
827828 else {
828- let ea = bA(R(S))
829- let cI = split(ea[E], "_")
830- let ei = cH(cI, eh, cK, cL)
831- let dQ = ei._1
832- let ec = ei._2
833- let bq = ei._3
834- let dR = ei._4
835- let ed = makeString_2C([ea[D], makeString(ec, "_"), ea[F], ea[G]], ":")
836- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
837- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dR, aj)], nil))
838- let ej = fraction(bq, aU, ai)
839- let dS = if ((k > ej))
829+ let eb = bB(R(S))
830+ let cJ = split(eb[E], "_")
831+ let ej = cI(cJ, ei, cL, cM)
832+ let dR = ej._1
833+ let ed = ej._2
834+ let bq = ej._3
835+ let dS = ej._4
836+ let ee = makeString_2C([eb[D], makeString(ed, "_"), eb[F], eb[G]], ":")
837+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
838+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
839+ let ek = fraction(bq, aU, ai)
840+ let dT = if ((k > ek))
840841 then k
841- else ej
842- let dT = (bq / 100)
843- if ((dS >= (bq - dT)))
844- then throw(("This trade does not cover delivery cost of " + aK(dS, 6)))
842+ else ek
843+ let dU = (bq / 100)
844+ if ((dT >= (bq - dU)))
845+ then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
845846 else {
846- let ek = valueOrElse(getInteger(X), 0)
847- $Tuple2((((dQ :+ ScriptTransfer(dV.caller, ((bq - dT) - dS), ad)) :+ IntegerEntry(X, (ek + dS))) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(ee, dY, ef))
847+ let el = valueOrElse(getInteger(X), 0)
848+ $Tuple2((((dR :+ ScriptTransfer(dW.caller, ((bq - dU) - dT), ad)) :+ IntegerEntry(X, (el + dT))) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
848849 }
849850 }
850851 }
851852
852853
853854
854-@Callable(dV)
855-func sellResourcesLandDelivery (cK,cL,V,eh) = if (!(ab))
855+@Callable(dW)
856+func sellResourcesLandDelivery (cL,cM,V,ei) = if (!(ab))
856857 then throw("Delivery feature is turned off!")
857858 else {
858- let dY = bD()
859- if ((size(dV.payments) != 0))
859+ let dZ = bE()
860+ if ((size(dW.payments) != 0))
860861 then throw("sellResources doesn't require any payments")
861862 else {
862- let el = dV.caller
863- let O = toString(el)
864- let em = value(assetInfo(fromBase58String(V)))
863+ let em = dW.caller
864+ let O = toString(em)
865+ let en = value(assetInfo(fromBase58String(V)))
865866 if (!(isDefined(getInteger(aB, M(V)))))
866- then throw((("NFT " + em.name) + " is not staked"))
867+ then throw((("NFT " + en.name) + " is not staked"))
867868 else {
868- let en = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + em.name) + " is orphaned"))
869- if ((en != O))
869+ let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
870+ if ((eo != O))
870871 then throw((e + " is not yours"))
871872 else {
872- let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
873- let bW = split_4C(dx, ":")
874- let cI = split(bW[x], "_")
875- let eo = cH(cI, eh, cK, cL)
876- let dQ = eo._1
877- let ec = eo._2
878- let bq = eo._3
879- let dR = eo._4
880- let dF = makeString_2C([bW[w], makeString(ec, "_"), bW[y], bW[z], bW[A]], ":")
881- let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
882- let ef = aH(invoke(aB, "updateAccStats", [O, fraction(a, dR, aj)], nil))
883- let ej = fraction(bq, aU, ai)
884- let dS = if ((k > ej))
873+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
874+ let bX = split_4C(dy, ":")
875+ let cJ = split(bX[x], "_")
876+ let ep = cI(cJ, ei, cL, cM)
877+ let dR = ep._1
878+ let ed = ep._2
879+ let bq = ep._3
880+ let dS = ep._4
881+ let dG = makeString_2C([bX[w], makeString(ed, "_"), bX[y], bX[z], bX[A]], ":")
882+ let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
883+ let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
884+ let ek = fraction(bq, aU, ai)
885+ let dT = if ((k > ek))
885886 then k
886- else ej
887- let dT = (bq / 100)
888- if ((dS >= (bq - dT)))
889- then throw(("This trade does not cover delivery cost of " + aK(dS, 6)))
887+ else ek
888+ let dU = (bq / 100)
889+ if ((dT >= (bq - dU)))
890+ then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
890891 else {
891- let ek = valueOrElse(getInteger(X), 0)
892- $Tuple2((((dQ :+ ScriptTransfer(dV.caller, ((bq - dT) - dS), ad)) :+ IntegerEntry(X, (ek + dS))) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(dH, dY, ef))
892+ let el = valueOrElse(getInteger(X), 0)
893+ $Tuple2((((dR :+ ScriptTransfer(dW.caller, ((bq - dU) - dT), ad)) :+ IntegerEntry(X, (el + dT))) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(dI, dZ, eg))
893894 }
894895 }
895896 }
896897 }
897898 }
898899
899900
900901
901-@Callable(dV)
902-func buyMaterials (cK,cQ) = {
903- let dY = bD()
904- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
905- if ((size(dV.payments) != 1))
902+@Callable(dW)
903+func buyMaterials (cL,cR) = {
904+ let dZ = bE()
905+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
906+ if ((size(dW.payments) != 1))
906907 then throw("exactly 1 payment must be attached")
907908 else {
908- let di = dV.payments[0]
909- let dj = di.amount
910- if (if (!(isDefined(di.assetId)))
909+ let dj = dW.payments[0]
910+ let dk = dj.amount
911+ if (if (!(isDefined(dj.assetId)))
911912 then true
912- else (value(di.assetId) != ad))
913+ else (value(dj.assetId) != ad))
913914 then throw("USDT payments only!")
914915 else {
915- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
916- if ((dZ[I] != "F"))
917- then throw(("Duck location type should be Factory, but is " + dZ[I]))
916+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
917+ if ((ea[I] != "F"))
918+ then throw(("Duck location type should be Factory, but is " + ea[I]))
918919 else {
919- let ea = bA(R(S))
920- let cP = split(ea[F], "_")
921- let ep = cO(cP, dZ[J], cK, cQ)
922- let dQ = ep._1
923- let eq = ep._2
924- let by = ep._3
925- let er = ep._4
926- if ((by > dj))
927- then throw(((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)))
920+ let eb = bB(R(S))
921+ let cQ = split(eb[F], "_")
922+ let eq = cP(cQ, ea[J], cL, cR)
923+ let dR = eq._1
924+ let er = eq._2
925+ let bz = eq._3
926+ let es = eq._4
927+ if ((bz > dk))
928+ then throw(((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)))
928929 else {
929- let ed = makeString([ea[D], ea[E], makeString(eq, "_"), ea[G]], ":")
930- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
931- let aw = if (((dj - by) > 0))
932- then [ScriptTransfer(dV.caller, (dj - by), ad)]
930+ let ee = makeString([eb[D], eb[E], makeString(er, "_"), eb[G]], ":")
931+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
932+ let aw = if (((dk - bz) > 0))
933+ then [ScriptTransfer(dW.caller, (dk - bz), ad)]
933934 else nil
934- let dT = (by / 100)
935- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, er, aj)], nil))
936- $Tuple2(((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)), $Tuple3(ee, dY, ef))
935+ let dU = (bz / 100)
936+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, es, aj)], nil))
937+ $Tuple2(((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
937938 }
938939 }
939940 }
940941 }
941942 }
942943
943944
944945
945-@Callable(dV)
946-func buyMaterialsDuckDelivery (cK,cQ,eh) = if (!(ab))
946+@Callable(dW)
947+func buyMaterialsDuckDelivery (cL,cR,ei) = if (!(ab))
947948 then throw("Delivery feature is turned off!")
948949 else {
949- let dY = bD()
950- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
951- if ((size(dV.payments) != 1))
950+ let dZ = bE()
951+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
952+ if ((size(dW.payments) != 1))
952953 then throw("exactly 1 payment must be attached")
953954 else {
954- let di = dV.payments[0]
955- let dj = di.amount
956- if (if (!(isDefined(di.assetId)))
955+ let dj = dW.payments[0]
956+ let dk = dj.amount
957+ if (if (!(isDefined(dj.assetId)))
957958 then true
958- else (value(di.assetId) != ad))
959+ else (value(dj.assetId) != ad))
959960 then throw("USDT payments only!")
960961 else {
961- let ea = bA(R(S))
962- let cP = split(ea[F], "_")
963- let es = cO(cP, eh, cK, cQ)
964- let dQ = es._1
965- let eq = es._2
966- let by = es._3
967- let er = es._4
968- let ed = makeString([ea[D], ea[E], makeString(eq, "_"), ea[G]], ":")
969- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
970- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, er, aj)], nil))
971- let ej = fraction(by, aU, ai)
972- let dS = if ((k > ej))
962+ let eb = bB(R(S))
963+ let cQ = split(eb[F], "_")
964+ let et = cP(cQ, ei, cL, cR)
965+ let dR = et._1
966+ let er = et._2
967+ let bz = et._3
968+ let es = et._4
969+ let ee = makeString([eb[D], eb[E], makeString(er, "_"), eb[G]], ":")
970+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
971+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, es, aj)], nil))
972+ let ek = fraction(bz, aU, ai)
973+ let dT = if ((k > ek))
973974 then k
974- else ej
975- let dk = (by + dS)
976- if ((dk > dj))
977- then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(dS, 6)) + "(delivery fee)"))
975+ else ek
976+ let dl = (bz + dT)
977+ if ((dl > dk))
978+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
978979 else {
979- let aw = if (((dj - dk) > 0))
980- then [ScriptTransfer(dV.caller, (dj - dk), ad)]
980+ let aw = if (((dk - dl) > 0))
981+ then [ScriptTransfer(dW.caller, (dk - dl), ad)]
981982 else nil
982- let dT = (by / 100)
983- let ek = valueOrElse(getInteger(X), 0)
984- $Tuple2((((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ek + dS))), $Tuple3(ee, dY, ef))
983+ let dU = (bz / 100)
984+ let el = valueOrElse(getInteger(X), 0)
985+ $Tuple2((((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(ef, dZ, eg))
985986 }
986987 }
987988 }
988989 }
989990
990991
991992
992-@Callable(dV)
993-func buyMaterialsLandDelivery (cK,cQ,V,eh) = if (!(ab))
993+@Callable(dW)
994+func buyMaterialsLandDelivery (cL,cR,V,ei) = if (!(ab))
994995 then throw("Delivery feature is turned off!")
995996 else {
996- let dY = bD()
997- if ((size(dV.payments) != 1))
997+ let dZ = bE()
998+ if ((size(dW.payments) != 1))
998999 then throw("exactly 1 payment must be attached")
9991000 else {
1000- let di = dV.payments[0]
1001- let dj = di.amount
1002- if (if (!(isDefined(di.assetId)))
1001+ let dj = dW.payments[0]
1002+ let dk = dj.amount
1003+ if (if (!(isDefined(dj.assetId)))
10031004 then true
1004- else (value(di.assetId) != ad))
1005+ else (value(dj.assetId) != ad))
10051006 then throw("USDT payments only!")
10061007 else {
1007- let el = dV.caller
1008- let O = toString(el)
1009- let em = value(assetInfo(fromBase58String(V)))
1008+ let em = dW.caller
1009+ let O = toString(em)
1010+ let en = value(assetInfo(fromBase58String(V)))
10101011 if (!(isDefined(getInteger(aB, M(V)))))
1011- then throw((("NFT " + em.name) + " is not staked"))
1012+ then throw((("NFT " + en.name) + " is not staked"))
10121013 else {
1013- let en = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + em.name) + " is orphaned"))
1014- if ((en != O))
1014+ let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1015+ if ((eo != O))
10151016 then throw((e + " is not yours"))
10161017 else {
1017- let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1018- let bW = split_4C(dx, ":")
1019- let cP = split(bW[y], "_")
1020- let et = cO(cP, eh, cK, cQ)
1021- let dQ = et._1
1022- let eq = et._2
1023- let by = et._3
1024- let er = et._4
1025- let dF = makeString_2C([bW[w], bW[x], makeString(eq, "_"), bW[z], bW[A]], ":")
1026- let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1027- let ef = aH(invoke(aB, "updateAccStats", [O, fraction(a, er, aj)], nil))
1028- let ej = fraction(by, aU, ai)
1029- let dS = if ((k > ej))
1018+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1019+ let bX = split_4C(dy, ":")
1020+ let cQ = split(bX[y], "_")
1021+ let eu = cP(cQ, ei, cL, cR)
1022+ let dR = eu._1
1023+ let er = eu._2
1024+ let bz = eu._3
1025+ let es = eu._4
1026+ let dG = makeString_2C([bX[w], bX[x], makeString(er, "_"), bX[z], bX[A]], ":")
1027+ let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1028+ let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, es, aj)], nil))
1029+ let ek = fraction(bz, aU, ai)
1030+ let dT = if ((k > ek))
10301031 then k
1031- else ej
1032- let dk = (by + dS)
1033- if ((dk > dj))
1034- then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(dS, 6)) + "(delivery fee)"))
1032+ else ek
1033+ let dl = (bz + dT)
1034+ if ((dl > dk))
1035+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
10351036 else {
1036- let aw = if (((dj - dk) > 0))
1037- then [ScriptTransfer(dV.caller, (dj - dk), ad)]
1037+ let aw = if (((dk - dl) > 0))
1038+ then [ScriptTransfer(dW.caller, (dk - dl), ad)]
10381039 else nil
1039- let dT = (by / 100)
1040- let ek = valueOrElse(getInteger(X), 0)
1041- $Tuple2((((dQ ++ aw) :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ek + dS))), $Tuple3(dH, dY, ef))
1040+ let dU = (bz / 100)
1041+ let el = valueOrElse(getInteger(X), 0)
1042+ $Tuple2((((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(dI, dZ, eg))
10421043 }
10431044 }
10441045 }
10451046 }
10461047 }
10471048 }
10481049
10491050
10501051
1051-@Callable(dV)
1052-func exchangeResources (cK) = {
1053- let dY = bD()
1054- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
1055- if ((size(dV.payments) != 1))
1052+@Callable(dW)
1053+func exchangeResources (cL) = {
1054+ let dZ = bE()
1055+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1056+ if ((size(dW.payments) != 1))
10561057 then throw("exactly 1 payment must be attached")
10571058 else {
1058- let di = dV.payments[0]
1059- let dj = di.amount
1060- if (if (!(isDefined(di.assetId)))
1059+ let dj = dW.payments[0]
1060+ let dk = dj.amount
1061+ if (if (!(isDefined(dj.assetId)))
10611062 then true
1062- else (value(di.assetId) != ad))
1063+ else (value(dj.assetId) != ad))
10631064 then throw("USDT payments only!")
10641065 else {
1065- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
1066- if ((dZ[I] != "F"))
1067- then throw(("Duck location type should be Factory, but is " + dZ[I]))
1066+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1067+ if ((ea[I] != "F"))
1068+ then throw(("Duck location type should be Factory, but is " + ea[I]))
10681069 else {
1069- let ea = bA(R(S))
1070- let cI = split(ea[E], "_")
1071- let cP = split(ea[F], "_")
1072- let eu = cS(cI, cP, cK)
1073- let ec = eu._1
1074- let eq = eu._2
1075- let by = eu._3
1076- let ev = eu._4
1077- if ((by > dj))
1078- then throw(((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)))
1070+ let eb = bB(R(S))
1071+ let cJ = split(eb[E], "_")
1072+ let cQ = split(eb[F], "_")
1073+ let ev = cT(cJ, cQ, cL)
1074+ let ed = ev._1
1075+ let er = ev._2
1076+ let bz = ev._3
1077+ let ew = ev._4
1078+ if ((bz > dk))
1079+ then throw(((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)))
10791080 else {
1080- let ed = makeString([ea[D], makeString(ec, "_"), makeString(eq, "_"), ea[G]], ":")
1081- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
1082- let aw = if (((dj - by) > 0))
1083- then [ScriptTransfer(dV.caller, (dj - by), ad)]
1081+ let ee = makeString([eb[D], makeString(ed, "_"), makeString(er, "_"), eb[G]], ":")
1082+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1083+ let aw = if (((dk - bz) > 0))
1084+ then [ScriptTransfer(dW.caller, (dk - bz), ad)]
10841085 else nil
1085- let dT = (by / 100)
1086- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ev, aj)], nil))
1087- $Tuple2((aw :+ ScriptTransfer(aA, dT, ad)), $Tuple3(ee, dY, ef))
1086+ let dU = (bz / 100)
1087+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ew, aj)], nil))
1088+ $Tuple2((aw :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
10881089 }
10891090 }
10901091 }
10911092 }
10921093 }
10931094
10941095
10951096
1096-@Callable(dV)
1097-func exchangeResourcesDuckDelivery (cK) = {
1098- let dY = bD()
1099- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
1100- if ((size(dV.payments) != 1))
1097+@Callable(dW)
1098+func exchangeResourcesDuckDelivery (cL) = {
1099+ let dZ = bE()
1100+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1101+ if ((size(dW.payments) != 1))
11011102 then throw("exactly 1 payment must be attached")
11021103 else {
1103- let di = dV.payments[0]
1104- let dj = di.amount
1105- if (if (!(isDefined(di.assetId)))
1104+ let dj = dW.payments[0]
1105+ let dk = dj.amount
1106+ if (if (!(isDefined(dj.assetId)))
11061107 then true
1107- else (value(di.assetId) != ad))
1108+ else (value(dj.assetId) != ad))
11081109 then throw("USDT payments only!")
11091110 else {
1110- let ea = bA(R(S))
1111- let cI = split(ea[E], "_")
1112- let cP = split(ea[F], "_")
1113- let ew = cS(cI, cP, cK)
1114- let ec = ew._1
1115- let eq = ew._2
1116- let by = ew._3
1117- let ev = ew._4
1118- let ej = fraction(by, aV, ai)
1119- let dS = if ((l > ej))
1111+ let eb = bB(R(S))
1112+ let cJ = split(eb[E], "_")
1113+ let cQ = split(eb[F], "_")
1114+ let ex = cT(cJ, cQ, cL)
1115+ let ed = ex._1
1116+ let er = ex._2
1117+ let bz = ex._3
1118+ let ew = ex._4
1119+ let ek = fraction(bz, aV, ai)
1120+ let dT = if ((l > ek))
11201121 then l
1121- else ej
1122- let dk = (by + dS)
1123- if ((dk > dj))
1124- then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(dS, 6)) + "(delivery fee)"))
1122+ else ek
1123+ let dl = (bz + dT)
1124+ if ((dl > dk))
1125+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
11251126 else {
1126- let ed = makeString([ea[D], makeString(ec, "_"), makeString(eq, "_"), ea[G]], ":")
1127- let ee = aE(invoke(aB, "updateBackpack", [S, ed], nil))
1128- let aw = if (((dj - dk) > 0))
1129- then [ScriptTransfer(dV.caller, (dj - dk), ad)]
1127+ let ee = makeString([eb[D], makeString(ed, "_"), makeString(er, "_"), eb[G]], ":")
1128+ let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1129+ let aw = if (((dk - dl) > 0))
1130+ then [ScriptTransfer(dW.caller, (dk - dl), ad)]
11301131 else nil
1131- let dT = (by / 100)
1132- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ev, aj)], nil))
1133- let ek = valueOrElse(getInteger(X), 0)
1134- $Tuple2(((aw :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ek + dS))), $Tuple3(ee, dY, ef))
1132+ let dU = (bz / 100)
1133+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ew, aj)], nil))
1134+ let el = valueOrElse(getInteger(X), 0)
1135+ $Tuple2(((aw :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(ef, dZ, eg))
11351136 }
11361137 }
11371138 }
11381139 }
11391140
11401141
11411142
1142-@Callable(dV)
1143-func exchangeResourcesLandDelivery (cK,V) = {
1144- let dY = bD()
1145- if ((size(dV.payments) != 1))
1143+@Callable(dW)
1144+func exchangeResourcesLandDelivery (cL,V) = {
1145+ let dZ = bE()
1146+ if ((size(dW.payments) != 1))
11461147 then throw("exactly 1 payment must be attached")
11471148 else {
1148- let di = dV.payments[0]
1149- let dj = di.amount
1150- if (if (!(isDefined(di.assetId)))
1149+ let dj = dW.payments[0]
1150+ let dk = dj.amount
1151+ if (if (!(isDefined(dj.assetId)))
11511152 then true
1152- else (value(di.assetId) != ad))
1153+ else (value(dj.assetId) != ad))
11531154 then throw("USDT payments only!")
11541155 else {
1155- let el = dV.caller
1156- let O = toString(el)
1157- let em = value(assetInfo(fromBase58String(V)))
1156+ let em = dW.caller
1157+ let O = toString(em)
1158+ let en = value(assetInfo(fromBase58String(V)))
11581159 if (!(isDefined(getInteger(aB, M(V)))))
1159- then throw((("NFT " + em.name) + " is not staked"))
1160+ then throw((("NFT " + en.name) + " is not staked"))
11601161 else {
1161- let en = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + em.name) + " is orphaned"))
1162- if ((en != O))
1162+ let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1163+ if ((eo != O))
11631164 then throw((e + " is not yours"))
11641165 else {
1165- let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1166- let bW = split_4C(dx, ":")
1167- let cI = split(bW[x], "_")
1168- let cP = split(bW[y], "_")
1169- let ex = cS(cI, cP, cK)
1170- let ec = ex._1
1171- let eq = ex._2
1172- let by = ex._3
1173- let ev = ex._4
1174- let dF = makeString_2C([bW[w], makeString(ec, "_"), makeString(eq, "_"), bW[z], bW[A]], ":")
1175- let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1176- let ef = aH(invoke(aB, "updateAccStats", [O, fraction(a, ev, aj)], nil))
1177- let ej = fraction(by, aV, ai)
1178- let dS = if ((l > ej))
1166+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1167+ let bX = split_4C(dy, ":")
1168+ let cJ = split(bX[x], "_")
1169+ let cQ = split(bX[y], "_")
1170+ let ey = cT(cJ, cQ, cL)
1171+ let ed = ey._1
1172+ let er = ey._2
1173+ let bz = ey._3
1174+ let ew = ey._4
1175+ let dG = makeString_2C([bX[w], makeString(ed, "_"), makeString(er, "_"), bX[z], bX[A]], ":")
1176+ let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1177+ let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, ew, aj)], nil))
1178+ let ek = fraction(bz, aV, ai)
1179+ let dT = if ((l > ek))
11791180 then l
1180- else ej
1181- let dk = (by + dS)
1182- if ((dk > dj))
1183- then throw((((((("Insufficient payment! Attached=" + aK(dj, 6)) + ", required=") + aK(by, 6)) + "+") + aK(dS, 6)) + "(delivery fee)"))
1181+ else ek
1182+ let dl = (bz + dT)
1183+ if ((dl > dk))
1184+ then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
11841185 else {
1185- let aw = if (((dj - dk) > 0))
1186- then [ScriptTransfer(dV.caller, (dj - dk), ad)]
1186+ let aw = if (((dk - dl) > 0))
1187+ then [ScriptTransfer(dW.caller, (dk - dl), ad)]
11871188 else nil
1188- let dT = (by / 100)
1189- let ek = valueOrElse(getInteger(X), 0)
1190- $Tuple2(((aw :+ ScriptTransfer(aA, dT, ad)) :+ IntegerEntry(X, (ek + dS))), $Tuple3(dH, dY, ef))
1189+ let dU = (bz / 100)
1190+ let el = valueOrElse(getInteger(X), 0)
1191+ $Tuple2(((aw :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(dI, dZ, eg))
11911192 }
11921193 }
11931194 }
11941195 }
11951196 }
11961197 }
11971198
11981199
11991200
1200-@Callable(dV)
1201-func craftGoods (ey,ez) = {
1202- let dY = bD()
1203- if ((size(dV.payments) != 1))
1201+@Callable(dW)
1202+func craftGoods (ez,eA) = {
1203+ let dZ = bE()
1204+ if ((size(dW.payments) != 1))
12041205 then throw("exactly 1 payment must be attached")
12051206 else {
1206- let di = dV.payments[0]
1207- let dj = di.amount
1208- let eA = valueOrErrorMessage(di.assetId, "WAVES can't be used as payment")
1209- if ((eA != ad))
1207+ let dj = dW.payments[0]
1208+ let dk = dj.amount
1209+ let eB = valueOrErrorMessage(dj.assetId, "WAVES can't be used as payment")
1210+ if ((eB != ad))
12101211 then throw("USDT payments only!")
1211- else if ((dj != ai))
1212+ else if ((dk != ai))
12121213 then throw("exactly 1 USDT must be attached as payment")
1213- else if ((0 >= ez))
1214+ else if ((0 >= eA))
12141215 then throw("Quantity should be positive")
12151216 else {
1216- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
1217- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
1218- if ((dZ[I] != "M"))
1219- then throw(("Duck location type should be Manufactory, but is " + dZ[I]))
1217+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1218+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1219+ if ((ea[I] != "M"))
1220+ then throw(("Duck location type should be Manufactory, but is " + ea[I]))
12201221 else {
1221- let eB = dZ[H]
1222- let ea = bA(R(S))
1223- let cP = split(ea[F], "_")
1224- if (if ((0 > ey))
1222+ let eC = ea[H]
1223+ let eb = bB(R(S))
1224+ let cQ = split(eb[F], "_")
1225+ if (if ((0 > ez))
12251226 then true
1226- else (ey >= size(r)))
1227- then throw(("Unknown product idx=" + toString(ey)))
1227+ else (ez >= size(r)))
1228+ then throw(("Unknown product idx=" + toString(ez)))
12281229 else {
1229- let aa = split(r[ey], "_")
1230+ let aa = split(r[ez], "_")
12301231 if ((size(aa) != u))
1231- then throw(("Fatal: unknown recipe: " + r[ey]))
1232+ then throw(("Fatal: unknown recipe: " + r[ez]))
12321233 else {
1233- let eC = parseIntValue(aa[t])
1234- if ((p[eC] != eB))
1235- then throw(((("This product is available in " + p[eC]) + ", but you are in ") + eB))
1234+ let eD = parseIntValue(aa[t])
1235+ if ((p[eD] != eC))
1236+ then throw(((("This product is available in " + p[eD]) + ", but you are in ") + eC))
12361237 else {
1237- let eD = if ((ea[G] == ""))
1238+ let eE = if ((eb[G] == ""))
12381239 then nil
1239- else split_4C(ea[G], "_")
1240- func eE (bF,eF) = {
1241- let aI = bF._2
1242- let eG = if ((size(eD) > aI))
1243- then eD[aI]
1240+ else split_4C(eb[G], "_")
1241+ func eF (bG,eG) = {
1242+ let aI = bG._2
1243+ let eH = if ((size(eE) > aI))
1244+ then eE[aI]
12441245 else "0"
1245- let dO = parseIntValue(eG)
1246- let bg = (ez * v)
1247- let eH = if ((aI == ey))
1248- then toString((dO + bg))
1249- else eG
1250- $Tuple2((bF._1 :+ eH), (aI + 1))
1246+ let dP = parseIntValue(eH)
1247+ let bg = (eA * v)
1248+ let eI = if ((aI == ez))
1249+ then toString((dP + bg))
1250+ else eH
1251+ $Tuple2((bG._1 :+ eI), (aI + 1))
12511252 }
12521253
1253- let eI = ( let cj = r
1254- let ck = size(cj)
1255- let cl = $Tuple2(nil, 0)
1256- func cm (cn,co) = if ((co >= ck))
1257- then cn
1258- else eE(cn, cj[co])
1254+ let eJ = ( let ck = r
1255+ let cl = size(ck)
1256+ let cm = $Tuple2(nil, 0)
1257+ func cn (co,cp) = if ((cp >= cl))
1258+ then co
1259+ else eF(co, ck[cp])
12591260
1260- func cp (cn,co) = if ((co >= ck))
1261- then cn
1261+ func cq (co,cp) = if ((cp >= cl))
1262+ then co
12621263 else throw("List size exceeds 50")
12631264
1264- 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
1265- func eJ (bF,bH) = {
1266- let eK = (((parseIntValue(aa[bH]) * ah) * ez) * parseIntValue(aa[s]))
1267- let eL = parseIntValue(cP[bH])
1268- if ((eK > eL))
1269- then throw(((((((("You have " + aK(eL, 8)) + " of ") + n[bH]) + ", but recipe requires ") + aK(eK, 8)) + " for quantity ") + toString(ez)))
1270- else if ((eK > 0))
1271- then $Tuple2((bF._1 :+ toString((eL - eK))), (bF._2 + eK))
1272- else $Tuple2((bF._1 :+ cP[bH]), bF._2)
1265+ cq(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cm, 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
1266+ func eK (bG,bI) = {
1267+ let eL = (((parseIntValue(aa[bI]) * ah) * eA) * parseIntValue(aa[s]))
1268+ let eM = parseIntValue(cQ[bI])
1269+ if ((eL > eM))
1270+ then throw(((((((("You have " + aK(eM, 8)) + " of ") + n[bI]) + ", but recipe requires ") + aK(eL, 8)) + " for quantity ") + toString(eA)))
1271+ else if ((eL > 0))
1272+ then $Tuple2((bG._1 :+ toString((eM - eL))), (bG._2 + eL))
1273+ else $Tuple2((bG._1 :+ cQ[bI]), bG._2)
12731274 }
12741275
1275- let eM = {
1276- let cj = am
1277- let ck = size(cj)
1278- let cl = $Tuple2(nil, 0)
1279- func cq (cn,co) = if ((co >= ck))
1280- then cn
1281- else eJ(cn, cj[co])
1276+ let eN = {
1277+ let ck = am
1278+ let cl = size(ck)
1279+ let cm = $Tuple2(nil, 0)
1280+ func cr (co,cp) = if ((cp >= cl))
1281+ then co
1282+ else eK(co, ck[cp])
12821283
1283- func cr (cn,co) = if ((co >= ck))
1284- then cn
1284+ func cs (co,cp) = if ((cp >= cl))
1285+ then co
12851286 else throw("List size exceeds 6")
12861287
1287- cr(cq(cq(cq(cq(cq(cq(cl, 0), 1), 2), 3), 4), 5), 6)
1288+ cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
12881289 }
1289- let ed = makeString([ea[D], ea[E], makeString(eM._1, "_"), makeString_2C(eI, "_")], ":")
1290- let eN = aE(invoke(aB, "updateBackpack", [S, ed], nil))
1291- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(b, eM._2, aj)], nil))
1292- $Tuple2(nil, $Tuple3(eN, dY, ef))
1290+ let ee = makeString([eb[D], eb[E], makeString(eN._1, "_"), makeString_2C(eJ, "_")], ":")
1291+ let eO = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1292+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(b, eN._2, aj)], nil))
1293+ $Tuple2(nil, $Tuple3(eO, dZ, eg))
12931294 }
12941295 }
12951296 }
12961297 }
12971298 }
12981299 }
12991300 }
13001301
13011302
13021303
1303-@Callable(dV)
1304-func setWarehouseOrder (eO,V) = {
1305- let el = dV.originCaller
1306- let O = toString(el)
1307- let eN = if ((el != aA))
1308- then bC()
1304+@Callable(dW)
1305+func setWarehouseOrder (eP,V) = {
1306+ let em = dW.originCaller
1307+ let O = toString(em)
1308+ let eO = if ((em != aA))
1309+ then bD()
13091310 else false
1310- let em = value(assetInfo(fromBase58String(V)))
1311+ let en = value(assetInfo(fromBase58String(V)))
13111312 if (!(isDefined(getInteger(aB, M(V)))))
1312- then throw((("NFT " + em.name) + " is not staked"))
1313+ then throw((("NFT " + en.name) + " is not staked"))
13131314 else {
1314- let en = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + em.name) + " is orphaned"))
1315- if (if ((el != aA))
1316- then (en != O)
1315+ let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1316+ if (if ((em != aA))
1317+ then (eo != O)
13171318 else false)
13181319 then throw((e + " is not yours"))
13191320 else {
1320- let eP = split_4C(eO, ":")
1321- let dx = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1322- let bW = split_4C(dx, ":")
1323- let eQ = split(bW[A], "_")
1324- let eR = parseIntValue(eQ[C])
1321+ let eQ = split_4C(eP, ":")
1322+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1323+ let bX = split_4C(dy, ":")
1324+ let eR = split(bX[A], "_")
1325+ let eS = parseIntValue(eR[C])
13251326 let bd = U(V)
1326- let bX = bc(bd)
1327- let dW = bV(bW, bX, eP)
1328- let eS = dW._4
1329- let eT = dW._5
1330- let eU = dW._7
1331- let eV = (eS + eT)
1332- let eW = ((eR - eU) - eV)
1333- if ((0 > eW))
1334- then throw((((((("Attempt to reserve " + toString(eS)) + " space for buy orders, and ") + toString(eT)) + " space for sell orders (and occupied=") + toString(eU)) + "), leads to negative free space"))
1327+ let bY = bc(bd)
1328+ let dX = bW(bX, bY, eQ)
1329+ let eT = dX._4
1330+ let eU = dX._5
1331+ let eV = dX._7
1332+ let eW = (eT + eU)
1333+ let eX = ((eS - eV) - eW)
1334+ if ((0 > eX))
1335+ then throw((((((("Attempt to reserve " + toString(eT)) + " space for buy orders, and ") + toString(eU)) + " space for sell orders (and occupied=") + toString(eV)) + "), leads to negative free space"))
13351336 else {
1336- let dF = makeString_2C([bW[w], makeString(dW._1, "_"), makeString(dW._2, "_"), makeString_2C(dW._3, "_"), toString(eV)], ":")
1337- let dH = aE(invoke(aB, "saveWarehouse", [dF, V], nil))
1338- let eX = dW._6
1339- let eY = if ((eX > 0))
1340- then if ((size(dV.payments) != 1))
1337+ let dG = makeString_2C([bX[w], makeString(dX._1, "_"), makeString(dX._2, "_"), makeString_2C(dX._3, "_"), toString(eW)], ":")
1338+ let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1339+ let eY = dX._6
1340+ let eZ = if ((eY > 0))
1341+ then if ((size(dW.payments) != 1))
13411342 then throw("exactly 1 payment must be attached")
13421343 else {
1343- let di = dV.payments[0]
1344- let dj = di.amount
1345- let eA = valueOrErrorMessage(di.assetId, "WAVES can't be used as payment")
1346- if ((eA != ad))
1344+ let dj = dW.payments[0]
1345+ let dk = dj.amount
1346+ let eB = valueOrErrorMessage(dj.assetId, "WAVES can't be used as payment")
1347+ if ((eB != ad))
13471348 then throw("USDT payments only!")
1348- else if ((dj != eX))
1349- then throw(("Payment needed is " + toString(eX)))
1350- else [StringEntry(bd, eO)]
1349+ else if ((dk != eY))
1350+ then throw(("Payment needed is " + toString(eY)))
1351+ else [StringEntry(bd, eP)]
13511352 }
1352- else if ((eX == 0))
1353- then if ((size(dV.payments) != 0))
1353+ else if ((eY == 0))
1354+ then if ((size(dW.payments) != 0))
13541355 then throw("No payments needed")
1355- else [StringEntry(bd, eO)]
1356- else if ((size(dV.payments) != 0))
1356+ else [StringEntry(bd, eP)]
1357+ else if ((size(dW.payments) != 0))
13571358 then throw("No payments needed")
1358- else [ScriptTransfer(addressFromStringValue(en), -(eX), ad), StringEntry(bd, eO)]
1359- $Tuple2(eY, $Tuple2(eN, dH))
1359+ else [ScriptTransfer(addressFromStringValue(eo), -(eY), ad), StringEntry(bd, eP)]
1360+ $Tuple2(eZ, $Tuple2(eO, dI))
13601361 }
13611362 }
13621363 }
13631364 }
13641365
13651366
13661367
1367-@Callable(dV)
1368-func acceptWarehouseOrder (do,dn,S) = {
1369- let dY = bD()
1370- let dc = dV.originCaller
1371- let cX = toString(dc)
1372- let eZ = valueOrErrorMessage(getString(aB, P(cX)), "You don't have a duck staked")
1373- let dZ = valueOrElse(getString(aB, T(eZ)), g)
1374- let fa = split(value(dZ), "_")
1375- if ((fa[I] != "L"))
1376- then throw((("Duck location type is " + fa[I]) + ", but should be L"))
1377- else if ((eZ != S))
1378- then throw(((("Your staked duck is " + eZ) + ", but passed ") + S))
1368+@Callable(dW)
1369+func acceptWarehouseOrder (dp,do,S) = {
1370+ let dZ = bE()
1371+ let dd = dW.originCaller
1372+ let cY = toString(dd)
1373+ let fa = valueOrErrorMessage(getString(aB, P(cY)), "You don't have a duck staked")
1374+ let ea = valueOrElse(getString(aB, T(fa)), g)
1375+ let fb = split(value(ea), "_")
1376+ if ((fb[I] != "L"))
1377+ then throw((("Duck location type is " + fb[I]) + ", but should be L"))
1378+ else if ((fa != S))
1379+ then throw(((("Your staked duck is " + fa) + ", but passed ") + S))
13791380 else {
1380- let bB = R(S)
1381- let ea = bA(bB)
1382- let dp = split(ea[E], "_")
1383- let dq = split(ea[F], "_")
1384- let dr = if ((ea[G] == ""))
1381+ let bC = R(S)
1382+ let eb = bB(bC)
1383+ let dq = split(eb[E], "_")
1384+ let dr = split(eb[F], "_")
1385+ let ds = if ((eb[G] == ""))
13851386 then nil
1386- else split_4C(ea[G], "_")
1387- let fb = dm(dn, cX, do, dp, dq, dr)
1388- let fc = fb._1
1389- let fd = fb._2
1390- let fe = fb._3
1391- let ff = fb._4
1392- let cW = fb._5
1393- let de = fb._6
1394- let fg = fb._7
1395- let dg = fb._8
1396- let fh = fb._9
1397- let dI = fb._10
1398- let fi = [fc, cV(cW, cX, 0)]
1399- let fj = dd(de, dV.payments, dg, 0)
1400- let fk = makeString_2C([ea[D], makeString(fd, "_"), makeString(fe, "_"), makeString_2C(ff, "_")], ":")
1401- let fl = aE(invoke(aB, "updateBackpack", [S, fk], nil))
1402- let fm = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fg, aj)], nil))
1403- $Tuple2((fi ++ fj), $Tuple5(dY, fh, fl, fm, dI))
1387+ else split_4C(eb[G], "_")
1388+ let fc = dn(do, cY, dp, dq, dr, ds)
1389+ let fd = fc._1
1390+ let fe = fc._2
1391+ let ff = fc._3
1392+ let fg = fc._4
1393+ let cX = fc._5
1394+ let df = fc._6
1395+ let fh = fc._7
1396+ let dh = fc._8
1397+ let fi = fc._9
1398+ let dJ = fc._10
1399+ let fj = [fd, cW(cX, cY, 0)]
1400+ let fk = de(df, dW.payments, dh, 0)
1401+ let fl = makeString_2C([eb[D], makeString(fe, "_"), makeString(ff, "_"), makeString_2C(fg, "_")], ":")
1402+ let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1403+ let fn = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fh, aj)], nil))
1404+ $Tuple2((fj ++ fk), $Tuple5(dZ, fi, fm, fn, dJ))
14041405 }
14051406 }
14061407
14071408
14081409
1409-@Callable(dV)
1410-func acceptShopOrderDuckDelivery (fn,dn) = if (!(ab))
1410+@Callable(dW)
1411+func acceptShopOrderDuckDelivery (fo,do) = if (!(ab))
14111412 then throw("Delivery feature is turned off!")
14121413 else {
1413- let dY = bD()
1414- let dc = dV.originCaller
1415- let cX = toString(dc)
1416- let S = valueOrErrorMessage(getString(aB, P(cX)), "You don't have a duck staked")
1417- let bB = R(S)
1418- let ea = bA(bB)
1419- let dp = split(ea[E], "_")
1420- let dq = split(ea[F], "_")
1421- let dr = if ((ea[G] == ""))
1414+ let dZ = bE()
1415+ let dd = dW.originCaller
1416+ let cY = toString(dd)
1417+ let S = valueOrErrorMessage(getString(aB, P(cY)), "You don't have a duck staked")
1418+ let bC = R(S)
1419+ let eb = bB(bC)
1420+ let dq = split(eb[E], "_")
1421+ let dr = split(eb[F], "_")
1422+ let ds = if ((eb[G] == ""))
14221423 then nil
1423- else split_4C(ea[G], "_")
1424- let fo = dm(dn, cX, fn, dp, dq, dr)
1425- let fc = fo._1
1426- let fd = fo._2
1427- let fe = fo._3
1428- let ff = fo._4
1429- let cW = fo._5
1430- let de = fo._6
1431- let fg = fo._7
1432- let dg = fo._8
1433- let fh = fo._9
1434- let dI = fo._10
1435- let fp = fraction((de + cW), aU, ai)
1436- let fq = if ((k > fp))
1424+ else split_4C(eb[G], "_")
1425+ let fp = dn(do, cY, fo, dq, dr, ds)
1426+ let fd = fp._1
1427+ let fe = fp._2
1428+ let ff = fp._3
1429+ let fg = fp._4
1430+ let cX = fp._5
1431+ let df = fp._6
1432+ let fh = fp._7
1433+ let dh = fp._8
1434+ let fi = fp._9
1435+ let dJ = fp._10
1436+ let fq = fraction((df + cX), aU, ai)
1437+ let fr = if ((k > fq))
14371438 then k
1438- else fp
1439- let dh = fraction(fq, de, (de + cW))
1440- let cY = (fq - dh)
1441- let ek = valueOrElse(getInteger(X), 0)
1442- let fi = [fc, cV(cW, cX, cY)]
1443- let fj = dd(de, dV.payments, dg, dh)
1444- let fk = makeString_2C([ea[D], makeString(fd, "_"), makeString(fe, "_"), makeString_2C(ff, "_")], ":")
1445- let fl = aE(invoke(aB, "updateBackpack", [S, fk], nil))
1446- let fm = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fg, aj)], nil))
1447- $Tuple2(((fi ++ fj) :+ IntegerEntry(X, (ek + fq))), $Tuple5(dY, fh, fl, fm, dI))
1439+ else fq
1440+ let di = fraction(fr, df, (df + cX))
1441+ let cZ = (fr - di)
1442+ let el = valueOrElse(getInteger(X), 0)
1443+ let fj = [fd, cW(cX, cY, cZ)]
1444+ let fk = de(df, dW.payments, dh, di)
1445+ let fl = makeString_2C([eb[D], makeString(fe, "_"), makeString(ff, "_"), makeString_2C(fg, "_")], ":")
1446+ let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1447+ let fn = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fh, aj)], nil))
1448+ $Tuple2(((fj ++ fk) :+ IntegerEntry(X, (el + fr))), $Tuple5(dZ, fi, fm, fn, dJ))
14481449 }
14491450
14501451
14511452
1452-@Callable(dV)
1453-func acceptShopOrderLandDelivery (fn,dn,fr) = if (!(ab))
1453+@Callable(dW)
1454+func acceptShopOrderLandDelivery (fo,do,fs) = if (!(ab))
14541455 then throw("Delivery feature is turned off!")
14551456 else {
1456- let dY = bD()
1457- let dc = dV.originCaller
1458- let cX = toString(dc)
1459- let em = value(assetInfo(fromBase58String(fr)))
1460- if (!(isDefined(getInteger(aB, M(fr)))))
1461- then throw((("NFT " + em.name) + " is not staked"))
1457+ let dZ = bE()
1458+ let dd = dW.originCaller
1459+ let cY = toString(dd)
1460+ let en = value(assetInfo(fromBase58String(fs)))
1461+ if (!(isDefined(getInteger(aB, M(fs)))))
1462+ then throw((("NFT " + en.name) + " is not staked"))
14621463 else {
1463- let en = valueOrErrorMessage(getString(aB, K(fr)), (("NFT " + em.name) + " is orphaned"))
1464- if ((en != cX))
1464+ let eo = valueOrErrorMessage(getString(aB, K(fs)), (("NFT " + en.name) + " is orphaned"))
1465+ if ((eo != cY))
14651466 then throw((e + " is not yours"))
14661467 else {
1467- let dx = aE(invoke(aB, "getWarehouseREADONLY", [fr], nil))
1468- let bW = split_4C(dx, ":")
1469- let cI = split(bW[x], "_")
1470- let cP = split(bW[y], "_")
1471- let eD = if ((bW[z] == ""))
1468+ let dy = aE(invoke(aB, "getWarehouseREADONLY", [fs], nil))
1469+ let bX = split_4C(dy, ":")
1470+ let cJ = split(bX[x], "_")
1471+ let cQ = split(bX[y], "_")
1472+ let eE = if ((bX[z] == ""))
14721473 then nil
1473- else split(bW[z], "_")
1474- let fs = dm(dn, cX, fn, cI, cP, eD)
1475- let fc = fs._1
1476- let fd = fs._2
1477- let fe = fs._3
1478- let ff = fs._4
1479- let cW = fs._5
1480- let de = fs._6
1481- let fg = fs._7
1482- let dg = fs._8
1483- let fh = fs._9
1484- let dI = fs._10
1485- let fp = fraction((de + cW), aU, ai)
1486- let fq = if ((k > fp))
1474+ else split(bX[z], "_")
1475+ let ft = dn(do, cY, fo, cJ, cQ, eE)
1476+ let fd = ft._1
1477+ let fe = ft._2
1478+ let ff = ft._3
1479+ let fg = ft._4
1480+ let cX = ft._5
1481+ let df = ft._6
1482+ let fh = ft._7
1483+ let dh = ft._8
1484+ let fi = ft._9
1485+ let dJ = ft._10
1486+ let fq = fraction((df + cX), aU, ai)
1487+ let fr = if ((k > fq))
14871488 then k
1488- else fp
1489- let dh = fraction(fq, de, (de + cW))
1490- let cY = (fq - dh)
1491- let ek = valueOrElse(getInteger(X), 0)
1492- let fi = [fc, cV(cW, cX, cY)]
1493- let fj = dd(de, dV.payments, dg, dh)
1494- let dF = makeString_2C([bW[w], makeString(fd, "_"), makeString(fe, "_"), makeString(ff, "_"), bW[A]], ":")
1495- let dH = aE(invoke(aB, "saveWarehouse", [dF, fr], nil))
1496- let ef = aH(invoke(aB, "updateAccStats", [cX, fraction(d, fg, aj)], nil))
1497- $Tuple2(((fi ++ fj) :+ IntegerEntry(X, (ek + fq))), $Tuple5(dY, fh, dH, ef, dI))
1489+ else fq
1490+ let di = fraction(fr, df, (df + cX))
1491+ let cZ = (fr - di)
1492+ let el = valueOrElse(getInteger(X), 0)
1493+ let fj = [fd, cW(cX, cY, cZ)]
1494+ let fk = de(df, dW.payments, dh, di)
1495+ let dG = makeString_2C([bX[w], makeString(fe, "_"), makeString(ff, "_"), makeString(fg, "_"), bX[A]], ":")
1496+ let dI = aE(invoke(aB, "saveWarehouse", [dG, fs], nil))
1497+ let eg = aH(invoke(aB, "updateAccStats", [cY, fraction(d, fh, aj)], nil))
1498+ $Tuple2(((fj ++ fk) :+ IntegerEntry(X, (el + fr))), $Tuple5(dZ, fi, dI, eg, dJ))
14981499 }
14991500 }
15001501 }
15011502
15021503
15031504
1504-@Callable(dV)
1505-func sellProductsToES (cK) = {
1506- let dY = bD()
1507- if ((size(dV.payments) != 0))
1505+@Callable(dW)
1506+func sellProductsToES (cL) = {
1507+ let dZ = bE()
1508+ if ((size(dW.payments) != 0))
15081509 then throw("No payments needed")
15091510 else {
1510- let S = valueOrErrorMessage(getString(aB, P(toString(dV.caller))), "You don't have a duck staked")
1511- let dZ = split(valueOrElse(getString(aB, T(S)), g), "_")
1512- if ((dZ[I] != "A"))
1513- then throw(("Duck location type should be Airport, but is " + dZ[I]))
1511+ let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1512+ let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1513+ if ((ea[I] != "A"))
1514+ then throw(("Duck location type should be Airport, but is " + ea[I]))
15141515 else {
1515- let ea = bA(R(S))
1516- let eD = if ((ea[G] == ""))
1516+ let eb = bB(R(S))
1517+ let eE = if ((eb[G] == ""))
15171518 then nil
1518- else split_4C(ea[G], "_")
1519- let ft = W()
1520- let fu = getString(ft)
1521- let fv = if (isDefined(fu))
1522- then split_4C(value(fu), "_")
1519+ else split_4C(eb[G], "_")
1520+ let fu = W()
1521+ let fv = getString(fu)
1522+ let fw = if (isDefined(fv))
1523+ then split_4C(value(fv), "_")
15231524 else nil
1524- func fw (bF,fx) = {
1525- let bH = bF._1
1526- let ez = if ((size(cK) > bH))
1527- then cK[bH]
1525+ func fx (bG,fy) = {
1526+ let bI = bG._1
1527+ let eA = if ((size(cL) > bI))
1528+ then cL[bI]
15281529 else 0
1529- if ((0 > ez))
1530+ if ((0 > eA))
15301531 then throw("Quantity cannot be negative")
15311532 else {
1532- let aa = split(fx, "_")
1533+ let aa = split(fy, "_")
15331534 if ((size(aa) != u))
1534- then throw(("Fatal: unknown recipe: " + fx))
1535+ then throw(("Fatal: unknown recipe: " + fy))
15351536 else {
1536- let fy = (i * v)
1537- let fz = if ((size(fv) > bH))
1538- then parseIntValue(fv[bH])
1537+ let fz = (i * v)
1538+ let fA = if ((size(fw) > bI))
1539+ then parseIntValue(fw[bI])
15391540 else 0
1540- let fA = (fy - fz)
1541- if ((ez > fA))
1542- then throw(((("Warehouse can buy only " + toString(fA)) + " of ") + o[bH]))
1541+ let fB = (fz - fA)
1542+ if ((eA > fB))
1543+ then throw(((("Warehouse can buy only " + toString(fB)) + " of ") + o[bI]))
15431544 else {
1544- let er = Z(aa)
1545- let fB = fraction((er * j), h, (aj * v))
1546- let fC = if ((size(eD) > bH))
1547- then parseIntValue(eD[bH])
1545+ let es = Z(aa)
1546+ let fC = fraction((es * j), h, (aj * v))
1547+ let fD = if ((size(eE) > bI))
1548+ then parseIntValue(eE[bI])
15481549 else 0
1549- if ((ez > fC))
1550- then throw(((("You have only " + toString(fC)) + " of ") + o[bH]))
1551- else $Tuple5((bH + 1), (bF._2 + (fB * ez)), (bF._3 :+ toString((fC - ez))), (bF._4 :+ toString((fz + ez))), (bF._5 + (er * ez)))
1550+ if ((eA > fD))
1551+ then throw(((("You have only " + toString(fD)) + " of ") + o[bI]))
1552+ else $Tuple5((bI + 1), (bG._2 + (fC * eA)), (bG._3 :+ toString((fD - eA))), (bG._4 :+ toString((fA + eA))), (bG._5 + (es * eA)))
15521553 }
15531554 }
15541555 }
15551556 }
15561557
1557- let eM = {
1558- let cj = r
1559- let ck = size(cj)
1560- let cl = $Tuple5(0, 0, nil, nil, 0)
1561- func cm (cn,co) = if ((co >= ck))
1562- then cn
1563- else fw(cn, cj[co])
1558+ let eN = {
1559+ let ck = r
1560+ let cl = size(ck)
1561+ let cm = $Tuple5(0, 0, nil, nil, 0)
1562+ func cn (co,cp) = if ((cp >= cl))
1563+ then co
1564+ else fx(co, ck[cp])
15641565
1565- func cp (cn,co) = if ((co >= ck))
1566- then cn
1566+ func cq (co,cp) = if ((cp >= cl))
1567+ then co
15671568 else throw("List size exceeds 50")
15681569
1569- 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)
1570+ cq(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cm, 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)
15701571 }
1571- let fk = makeString_2C([ea[D], ea[E], ea[F], makeString_2C(eM._3, "_")], ":")
1572- let fl = aE(invoke(aB, "updateBackpack", [S, fk], nil))
1573- let ef = aH(invoke(aB, "updateDuckStats", [S, fraction(c, eM._5, (aj * 10))], nil))
1574- $Tuple2([StringEntry(ft, makeString_2C(eM._4, "_")), ScriptTransfer(dV.caller, eM._2, ad)], $Tuple3(fl, dY, ef))
1572+ let fl = makeString_2C([eb[D], eb[E], eb[F], makeString_2C(eN._3, "_")], ":")
1573+ let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1574+ let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(c, eN._5, (aj * 10))], nil))
1575+ $Tuple2([StringEntry(fu, makeString_2C(eN._4, "_")), ScriptTransfer(dW.caller, eN._2, ad)], $Tuple3(fm, dZ, eg))
15751576 }
15761577 }
15771578 }
15781579
15791580
15801581
1581-@Callable(dV)
1582-func updateEsStorage (fD) = if ((dV.caller != aB))
1582+@Callable(dW)
1583+func updateEsStorage (fE) = if ((dW.caller != aB))
15831584 then throw("Permission denied")
1584- else $Tuple2([StringEntry(W(), fD)], fD)
1585+ else $Tuple2([StringEntry(W(), fE)], fE)
15851586
15861587
15871588
1588-@Callable(dV)
1589-func updateDeliveryLocked (fE) = if ((dV.caller != aB))
1589+@Callable(dW)
1590+func updateDeliveryLocked (fF) = if ((dW.caller != aB))
15901591 then throw("Permission denied")
1591- else $Tuple2([IntegerEntry(Y, fE)], fE)
1592+ else $Tuple2([IntegerEntry(Y, fF)], fF)
15921593
15931594
15941595
1595-@Callable(dV)
1596-func sendDeliveryReward (O) = if ((dV.caller != aB))
1596+@Callable(dW)
1597+func sendDeliveryReward (O) = if ((dW.caller != aB))
15971598 then throw("Permission denied")
15981599 else {
1599- let ek = valueOrElse(getInteger(X), 0)
1600- let fF = valueOrElse(getInteger(Y), 0)
1601- $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (ek - k)), IntegerEntry(Y, (fF - k))], k)
1600+ let el = valueOrElse(getInteger(X), 0)
1601+ let fG = valueOrElse(getInteger(Y), 0)
1602+ $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (el - k)), IntegerEntry(Y, (fG - k))], k)
16021603 }
16031604
16041605

github/deemru/w8io/873ac7e 
897.08 ms