tx · GdBmar5LDBNngKGezh1CvQkUhdmduvM9t1HhNWbUK8i 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.10400000 Waves 2023.11.12 14:29 [2840066] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "GdBmar5LDBNngKGezh1CvQkUhdmduvM9t1HhNWbUK8i", "fee": 10400000, "feeAssetId": null, "timestamp": 1699788589361, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "a9RNu3oBz67X8Qt1XWPpeuWjmRqwymwGyBVATBi8UQM3cwyxRifRNTunQ6Djer3ebRPPtKbS4FqCZKJv1qPXGZT" ], "script": "base64:BgLgAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASABIECgICAhIAEgMKAQgSBAoCCAgSAwoBGBIECgIICBIECgIICBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCBIECgIICBIDCgEIEgASABIDCgEIEgMKAQgSBgoECAEIARIAEgQKAgICEgQKAgICEgASAwoBCBIApgIACURBWU1JTExJUwCAuJkpARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIABlNDQUxFOACAwtcvAAx4cExldmVsU2NhbGUAgBkAD3hwTGV2ZWxSZWNpcFBvdwCgHwASbnVtUG9pbnRzT25MZXZlbFVwAAMADnJvYmJlcnlDb3N0TWluAIDC1y8AFHJvYmJlcnlDb29sZG93bkNvZWZmAJADAAxyZXF1aXJlbWVudHMJAMwIAgIIU3RyZW5ndGgJAMwIAgIIQWNjdXJhY3kJAMwIAgIJSW50ZWxsZWN0CQDMCAICCUVuZHVyYW5jZQkAzAgCAglEZXh0ZXJpdHkJAMwIAgIFTGV2ZWwJAMwIAgIGSGVhbHRoBQNuaWwADGNoYXJTdHJlbmd0aAAAAAxjaGFyQWNjdXJhY3kAAQANY2hhckludGVsbGVjdAACAA1jaGFyRW5kdXJhbmNlAAMADWNoYXJEZXh0ZXJpdHkABAALc2VnQmFja3BhY2sAAAALTlVNU0VHTUVOVFMABgAKTlVNTUFJTkFVWAACAAhNQVhTTE9UUwACAA1NQVhQUk9ESU5TTE9UAB4AEGxhbmRSb2JDb29sZG93bnMJAMwIAgAACQDMCAIAwM8kCQDMCAIAoPc2CQDMCAIAgNzMFAkAzAgCAICupgoFA25pbAAOTUlOX1JFU19UT19ST0IAgNrECQAMcm9iSWR4TG9ja2VkAAEAC2R1Y2tJZHhGcmVlAAAAEGR1Y2tJZHhQcmVwYXJpbmcAAQENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQ2hhcnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tDaGFyc18FC2R1Y2tBc3NldElkAQlrZXlEdWNrWFABC2R1Y2tBc3NldElkCQCsAgICB2R1Y2tYUF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrTGV2ZWwBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tMZXZlbF8FC2R1Y2tBc3NldElkARFrZXlEdWNrRnJlZVBvaW50cwELZHVja0Fzc2V0SWQJAKwCAgIPZHVja0ZyZWVQb2ludHNfBQtkdWNrQXNzZXRJZAEQa2V5RHVja0VxdWlwbWVudAELZHVja0Fzc2V0SWQJAKwCAgIOZHVja0VxdWlwbWVudF8FC2R1Y2tBc3NldElkAQlrZXlVc2VyWFABBGFkZHIJAKwCAgIHdXNlclhQXwUEYWRkcgEMa2V5VXNlckxldmVsAQRhZGRyCQCsAgICCnVzZXJMZXZlbF8FBGFkZHIBEWtleVVzZXJGcmVlUG9pbnRzAQRhZGRyCQCsAgICD3VzZXJGcmVlUG9pbnRzXwUEYWRkcgEOa2V5U2F2ZWRIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICDHNhdmVkSGVhbHRoXwULZHVja0Fzc2V0SWQBEGtleVNhdmVkTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDnNhdmVkTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEMa2V5RHVja0J1ZmZzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQnVmZnNfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeVRpbWVfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlDb3N0QnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeUNvc3RfBQtkdWNrQXNzZXRJZAETa2V5TGFuZFJvYmJlcnlTdGF0ZQELbGFuZEFzc2V0SWQJAKwCAgIRbGFuZFJvYmJlcnlTdGF0ZV8FC2xhbmRBc3NldElkARJrZXlMYW5kQ29vbGRvd25FVEEBC2xhbmRBc3NldElkCQCsAgICEGxhbmRDb29sZG93bkVUQV8FC2xhbmRBc3NldElkARNrZXlEdWNrUm9iYmVyeVN0YXRlAQtkdWNrQXNzZXRJZAkArAICAhFkdWNrUm9iYmVyeVN0YXRlXwULZHVja0Fzc2V0SWQBE2tleUxvY2tlZExhbmRCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEWxvY2tlZExhbmRCeUR1Y2tfBQtkdWNrQXNzZXRJZAEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIUZGVsaXZlcnlEZWxheUJ5RHVja18FC2R1Y2tBc3NldElkARRrZXlVc2VyRGVsaXZlcnlDb3VudAEEYWRkcgkArAICAhJ1c2VyRGVsaXZlcnlDb3VudF8FBGFkZHIBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBGFkZHIJAKwCAgIUdXNlckxhc3REZWxpdmVyeURheV8FBGFkZHIAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzBA9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQKYnVmZkVmZmVjdApmb3JjZUJ1ZmZzBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsBApzdGF0ZUJ1ZmZzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwkAzggCCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAMFCmZvcmNlQnVmZnMJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0BQNuaWwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRGV4dGVyaXR5BQNuaWwBDmdldFJvYmJlcnlEYXRhAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEC2xhc3RSb2JDb3N0CQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawEFC2R1Y2tBc3NldElkAAAEC2xhc3RSb2JUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3JvYkNvc3QJAJYDAQkAzAgCBQ5yb2JiZXJ5Q29zdE1pbgkAzAgCCQBlAgULbGFzdFJvYkNvc3QJAGgCBRRyb2JiZXJ5Q29vbGRvd25Db2VmZgkAZQIFA25vdwULbGFzdFJvYlRpbWUFA25pbAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAAABApsb2NrZWRMYW5kCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAkAlwoFBQdyb2JDb3N0BQtsYXN0Um9iVGltZQUJZHVja1N0YXRlBQpsb2NrZWRMYW5kBQdsYW5kRVRBAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAAtST0JPX1BSRUZJWAIEUk9CTwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgAZAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAVTUlOX1VTRFRfRkVFX0RFTElWRVJZANCGAwASVEVOX01JTlVURVNfTUlMTElTAMDPJAAXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMAAQAaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQAgOHrFwAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEGZvcnRBbGxvd2VkUHJvZHMJAMwIAgAPCQDMCAIAEAkAzAgCABEJAMwIAgASCQDMCAIAEwkAzAgCABQFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICJThfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF8yMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKjRfMTNfMjJfNF8zNV8yMl8yM18wXzUwLDEsMF8wLDAsMCwwLDAsMCwwXwkAzAgCAio0XzEzXzIyXzRfMzVfMjJfNDZfMF81MCwxLDFfMCwyLDUsMCwwLDAsMF8JAMwIAgIrNF8xM18yMl80XzM1XzIyXzY5XzBfNTAsMiwxXzAsNSwxMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfMjBfMV8zMCwxLDFfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzQwXzFfMzAsMSwyXzIsMSwzLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV82MF8xXzMwLDEsM181LDIsOCwwLDAsMCwwXwUDbmlsAAlySWR4Q29lZmYABgAKcklkeEVmZmVjdAAIABBySWR4UmVxdWlyZW1lbnRzAAkACXJJZHhTbG90cwAKAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAt2b2xPY2N1cGllZAABAAd2b2xGcmVlAAIACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgNub18FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICBWxjbmFfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICA2xhcwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBnN0dGFvXwUHbmZ0VHlwZQIBXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARJrZXlXYXJlaG91c2VCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICA3doXwULbGFuZEFzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBF2tleUZvcnRpZmljYXRpb25zQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAg9mb3J0aWZpY2F0aW9uc18FC2xhbmRBc3NldElkARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhkdWNrQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQtkdWNrQXNzZXRJZAkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrXwULZHVja0Fzc2V0SWQBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBGFkZHIJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZER1Y2tCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQh1c2VyQWRkcgkArAICAholcyVzX191c2VyR3dsUmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMAD2RlbGl2ZXJ5RnVuZEtleQIMZGVsaXZlcnlGdW5kABFkZWxpdmVyeUxvY2tlZEtleQIOZGVsaXZlcnlMb2NrZWQADWxhc3RUb3VySWRLZXkCDiVzX19sYXN0VG91cklkARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBA3RJZAkArAICAhYlcyVkX190b3VyU3RhdGljRGF0YV9fCQCkAwEFA3RJZAEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEDdElkCQCsAgICFyVzJWRfX3RvdXJEeW5hbWljRGF0YV9fCQCkAwEFA3RJZAEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHyVzJWQlc19fYmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18ACWlkeFN0YXRpYwAAAAppZHhEeW5hbWljAAEACnRTdGF0aWNFbmQABgAOdER5bmFtaWNTdGF0dXMAAQELZ2V0VG91ckRhdGECDHRvdXJDb250cmFjdAN0SWQEBnN0YXRpYwkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMdG91ckNvbnRyYWN0CQEVa2V5VG91clN0YXRpY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwQHZHluYW1pYwkAvAkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMdG91ckNvbnRyYWN0CQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFA3RJZAkArAICCQCsAgICGUVycm9yIHJlYWRpbmcgdG91cm5hbWVudCAJAKQDAQUDdElkAgUgZGF0YQICX18JAMwIAgUGc3RhdGljCQDMCAIFB2R5bmFtaWMFA25pbAEOaXNJblRvdXJuYW1lbnQCDHRvdXJDb250cmFjdAhsb2NhdGlvbgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFDHRvdXJDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABANsb2MJALUJAgUIbG9jYXRpb24CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQx0b3VyQ29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMDAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBVAkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAUGbGFzdElkBwkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwEMaXNJbkRlbGl2ZXJ5AQhsb2NhdGlvbgQDbG9jCQC1CQIFCGxvY2F0aW9uAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlzdGFydFRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFCGxvY0lkeElkAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBRAkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93BwkAZwIAAwUIZGlzdGFuY2UHAQ9pc1VzdWFsTG9jYXRpb24BCGxvY2F0aW9uBAdsb2NUeXBlCQCRAwIJALUJAgUIbG9jYXRpb24CAV8FCmxvY0lkeFR5cGUDCQECIT0CBQdsb2NUeXBlAgFUCQECIT0CBQdsb2NUeXBlAgFEBwEJb25NaXNzaW9uAgx0b3VyQ29udHJhY3QIbG9jYXRpb24EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQx0b3VyQ29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQDbG9jCQC1CQIFCGxvY2F0aW9uAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUMdG91ckNvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAdsb2NUeXBlCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQMJAAACBQdsb2NUeXBlAgFEBgMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgUJQ09FRkYyTUFUAQxjaGVhdEF0dGVtcHQDBm9sZExvYwZuZXdMb2MJY2hlYXRDYXNlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFkNoZWF0IGF0dGVtcHQ6IG9sZExvYz0FBm9sZExvYwIJLCBuZXdMb2M9BQZuZXdMb2MCBywgY2FzZT0JAKQDAQUJY2hlYXRDYXNlABZLU19TRVBBUkFURV9QVUJMSUNfS0VZBwAYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFBwATS1NfQUxMT1dfUk9CT19EVUNLUwYACkRBWV9NSUxMSVMAgLiZKQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AE0RFTElWRVJZX1BVTklTSE1FTlQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgJeTBQMJAAACAQFUBQckbWF0Y2gwAKD3NgkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAAUSWR4Q2ZnVG91cm5hbWVudERhcHAABwAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAAEnRvdXJuYW1lbnRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ1RvdXJuYW1lbnREYXBwAA1hY3Jlc0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUPSWR4Q2ZnQWNyZXNEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ1hY3Jlc0NvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0AAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgITZmluaXNoQmxvY2tGb3JBZGRyXwUHYWRkcmVzcwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQljb250aW5lbnQJAKwCAgIUcmVzVHlwZXNCeUNvbnRpbmVudF8FCWNvbnRpbmVudAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCWFzQW55TGlzdAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAWwFByRtYXRjaDAFAWwJAAIBAhtmYWlsIHRvIGNhc3QgaW50byBMaXN0W0FueV0BCWFzQm9vbGVhbgEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFzBQckbWF0Y2gwBQFzCQACAQIZZmFpbCB0byBjYXN0IGludG8gQm9vbGVhbgEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQEHaXNEaWdpdAEBcwkBCWlzRGVmaW5lZAEJALYJAQUBcwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQBD2dldFJhbmRvbU51bWJlcgMIbWF4VmFsdWUEc2FsdAdlbnRyb3B5BApyYW5kb21IYXNoCQD3AwEJAMsBAgUEc2FsdAUHZW50cm9weQkAagIJALEJAQUKcmFuZG9tSGFzaAUIbWF4VmFsdWUADWluY3ViYXRvckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRWt0VnV4MlJoY2hTTjYzRHNEbzRiNG16NFFxektTZUR2AwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAAticmVlZGVyQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BEVnVVNDVIN0VoNWRtdE5iblJOUlN0R3dVTEE3Tlk2SGIDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AA3B1YgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAMFFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkBIKsXV48VZ+NZVEGw1nLrZpvEo9NmXtWZhlDfmDcfsgkIASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAMJAAACAQFUBQckbWF0Y2gwASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAkAAgECDVVua25vd24gY2hhaW4ADEVNUFRZX1BST0Q1MAGQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUZJVkVNSU5VVEVTTUlMTElTAOCnEgAMUkVOQU1JTkdDT1NUAMCWsQIACk1BWE5BTUVMRU4AMgAVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AICt4gQADEVYUE1BVEVSSUFMUwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACm3YLtqwcDCQAAAgEBVAUHJG1hdGNoMACqp4GzCQkAAgECDVVua25vd24gY2hhaW4AB0VYUFVTRFQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgOWadwMJAAACAQFUBQckbWF0Y2gwAIDlmncJAAIBAg1Vbmtub3duIGNoYWluAA5ST0JPX0RVQ0tfVVNEVACgjQYADFNfQ09TVF9BQ1JFUwCA8ouoCQAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAgRsY25fBQRuYW1lARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICA2xhXwUHbGFuZE51bQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgIFaWxhb18FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIDbG9fBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAEPa2V5TmV4dFJvYm9EdWNrAAIMbmV4dFJvYm9EdWNrAAtjbGFpbU1vZGVXaAAAAA1jbGFpbU1vZGVEdWNrAAEAE2NsYWltTW9kZVdoVGhlbkR1Y2sAAgAIZmxIZWFsdGgAAAALZmxUaW1lc3RhbXAABQAHZmxCb251cwAGAAtmbFByb2RzVXNlZAAHAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4ARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBEXN1YnRyYWN0RXF1aXBtZW50AgVvbGRFcQVwVXNlZAMJAAACBQVwVXNlZAIACQCUCgIFBW9sZEVxBwoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCCAUDYWNjAl8xCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAJQKAgkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB2VxUGFydHMAAAkAkQMCBQVwYXJ0cwAAAgE6CQCkAwEFBm5ld0FtdAUEdGFpbAMIBQNhY2MCXzIGAwMJAGcCBQNpZHgABgkAZwIACAUDaWR4BwkAAAIFBm5ld0FtdAAABwoAAiRsCQC1CQIFBXBVc2VkAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQVvbGRFcQcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1YlVzZWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBDnByb2RTdHJUb0J5dGVzAQdwcm9kU3RyBAVwTGlzdAMJAAACBQdwcm9kU3RyAgAFA25pbAkAvAkCBQdwcm9kU3RyAgFfCgEEdG9CVgIDYWNjBnJlY2lwZQQBagkAaQIJAMgBAQUDYWNjAAgEBGN1cnIDCQBmAgkAkAMBBQVwTGlzdAUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBMaXN0BQFqAAAJAMsBAgUDYWNjCQCaAwEF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CQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJUKAwUFcExpc3QFCG9jY3VwaWVkBQRmcmVlBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQEBm5ld0FtdAMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHCQBlAgUEY3VycgUFY291bnQJAGQCBQRjdXJyBQVjb3VudAQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCBQZuZXdBbXQFDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQRjdXJyBQ5QUk9EVUNUUEtHU0laRQkAlQoDCQDLAQIJAMsBAgUEaGVhZAkAmgMBBQZuZXdBbXQFBHRhaWwJAGQCBQhvY2N1cGllZAUIZGVsdGFWb2wJAGUCBQRmcmVlBQhkZWx0YVZvbAEIYWRkUHJvZEIHBmlkeENudAVwTGlzdAppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eARzbG90CWR1Y2tTdGF0cwQFcGFydHMJALUJAgUGaWR4Q250AgE6AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4OmFtb3VudAMDCQEBIQEFCmlzUG9zaXRpdmUJAQIhPQIJALECAQkAkQMCBQVwYXJ0cwAAAAIHCQACAQIrUHJvZHVjdCBpZHggc2hvdWxkIGJlIDIgZGlnaXRzLCB6ZXJvIHBhZGRlZAQKcHJvZHVjdElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMDCQBmAgAABQpwcm9kdWN0SWR4BgkAZwIFCnByb2R1Y3RJZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQJaXNCaWdJdGVtAwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcEBmNvbXBhdAkAkQMCBQZyZWNpcGUFCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1cHkgc2xvdCAwCQBmAgUJY051bVNsb3RzAAEHCQCUCgIJAMsBAgkAywECBQRoZWFkCQCaAwEJAGQCBQRjdXJyAwUKaXNQb3NpdGl2ZQUFY291bnQJAQEtAQUFY291bnQFBHRhaWwFCWlzQmlnSXRlbQELc2xvdHNHcm91cEIGAWcEYnBJbgppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eAVzdGF0cwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBXN0YXRzCQCUCgIFBGJwSW4HAwkBAiE9AgUCczECAAMIBQV0bXBTMAJfMgkAAgECHkJpZyBpdGVtIGFscmVhZHkgb2NjdXBpZXMgc2xvdAgJAQhhZGRQcm9kQgcFAnMxCAUFdG1wUzACXzEFCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAQUFc3RhdHMCXzEIBQV0bXBTMAJfMQUEYnBJbgEGZHJlc3NCBAdzZWdMaXN0BnBCeXRl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XwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQZjdXJyRXEFCXRlbXBQcm9kQgcFBXN0YXRzCQAAAgUIbmV3UHJvZEIFCG5ld1Byb2RCARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CEywgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUIcHJvcExpc3QFDXRlcnJhaW5Db3VudHMFDWxhbmRTaXplSW5kZXgFBHNpZ24CAV8BDWNvdW50VGVycmFpbnMBCHRlcnJhaW5zCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUEAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDWRpc3RyaWJ1dGVSZXMEDGN1cnJlbnRXaFJlcw5jdXJyZW50UGFja1JlcwpyZXNUb0NsYWltC3doU3BhY2VMZWZ0BA5yZXNMaXN0VG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzEEDHJlc0FtVG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUMcmVzQW1Ub0NsYWltAAAJAJQKAgkAuQkCBQxjdXJyZW50V2hSZXMCAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8DCQBnAgULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQoBCGFkZExpc3RzAgNhY2MBaQkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUC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eAkArAICCQCsAgIJAKQDAQUJbGFuZEluZGV4AgFfCQCkAwEFCmluZnJhTGV2ZWwEB3doVG90YWwJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCXZvbFByZWZpeAQFd2hTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFd2hLZXkJAKwCAgUJdm9sUHJlZml4Ahs6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6OjAEAndoCQC8CQIFBXdoU3RyAgE6BAp3aE9jY3VwaWVkCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQGd2hMb2Z0AwkAZgIABQkAkAMBBQJ3aAkAuQkCCQDMCAICATAJAMwIAgkApAMBBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8EBGxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBAh3aExvY2tlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFCXZvbExvY2tlZAQDb2NjAwkAZgIJAJADAQUEbG9mdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFCndoT2NjdXBpZWQJALkJAgkAzAgCCQCkAwEFCHdoTG9ja2VkCQDMCAIJAKQDAQUDb2NjCQDMCAIJAKQDAQkAZQIJAGUCBQd3aFRvdGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALwJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3docgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQQBcgoAAiRsBQhyZXNQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAAACgEF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DEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50AQxmbGlnaHRDb21tb24DCHVzZXJBZGRyB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAvAkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAvAkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCHVzZXJBZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEFDG9sZEZyb21TdGF0ZQIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAQEhAQkBF2NhbldlYXJDdXJyZW50RXF1aXBtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZFcXVpcG1lbnQgaW5jb21wYXRpYmxlBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzMzc2NzM0MzA2AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDMzNzY3MzQzMDYCXzEEBmR1Y2tJZAgFDSR0MDMzNzY3MzQzMDYCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzY2ODAzNzU1MQMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMzY2ODAzNzU1MQJfMQQFYnBSZXMIBQ0kdDAzNjY4MDM3NTUxAl8yBAVsb2Z0TwgFDSR0MDM2NjgwMzc1NTECXzMEBWxvZnRGCAUNJHQwMzY2ODAzNzU1MQJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADAwkBASEBBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGcCBQhjdXJMZXZlbAADBwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhtYXhJbmZyYQkAZAIJAGkCCQEEc3FydAQFBnBpZWNlcwAAAAAFBERPV04ABQACBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEDAwUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBmAgUIbmV3TGV2ZWwFCG1heEluZnJhBwkAAgEJAKwCAgIlQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IAkApAMBBQhtYXhJbmZyYQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAETdXBkYXRlU3RhdHNJbnRlcm5hbAQGbHZsS2V5BXhwS2V5CXBvaW50c0tleQdkZWx0YVhQBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQZsdmxLZXkAAAUFbmV3WFAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBvaW50c0tleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcG9pbnRzS2V5AAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgtkdWNrQXNzZXRJZAdkZWx0YVhQBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2R1Y2tBc3NldElkBARhZGRyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQtkdWNrQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDAwMFE0tTX0FMTE9XX1JPQk9fRFVDS1MJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzBwkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFC1JPQk9fUFJFRklYBwkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5VXNlckxldmVsAQUEYWRkcgkBCWtleVVzZXJYUAEFBGFkZHIJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIFB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkCQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBQdkZWx0YVhQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQlrZXlVc2VyWFABBQRhZGRyCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBQdkZWx0YVhQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgEPY2hlY2tUb3VybmFtZW50AQtkdWNrQXNzZXRJZAQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBVAcDAwMJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAUGbGFzdElkCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50CQEJYXNCb29sZWFuAQkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAENY2hlY2tEZWxpdmVyeQELZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFEBwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQDAwkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93CQBmAgABBQhkaXN0YW5jZQcJAAIBAiBZb3VyIGR1Y2sgaXMgb24gZGVsaXZlcnkgbWlzc2lvbgkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIUZXhpdERlbGl2ZXJ5SW50ZXJuYWwJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsARJleGl0RGVsaXZlcnlDb21tb24EC2R1Y2tBc3NldElkBWNoZWNrBW5ld0hQBXNjb3JlBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlzdGFydFRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAhkaXN0YW5jZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkAhRORlQgZHVjayBpcyBvcnBoYW5lZAQJaGVhbHRoS2V5CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAljdXJIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEFCWhlYWx0aEtleQQOb3V0Y29tZUFjdGlvbnMDAwkAZgIFCGRpc3RhbmNlAAAGAwMFBWNoZWNrCQBmAgUFc2NvcmUAAAcJAGYCBQVuZXdIUAAABwQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFBW93bmVyBQNuaWwFA25pbAMJAAACBQZyZXdhcmQFBnJld2FyZAQIY291bnRLZXkJARRrZXlVc2VyRGVsaXZlcnlDb3VudAEFBW93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIY291bnRLZXkAAAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBW93bmVyCQBpAgUJc3RhcnRUaW1lBQlEQVlNSUxMSVMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMDAwUFY2hlY2sJAGYCBQVuZXdIUAAABwkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93BwkAAgECJllvdXIgZHVjayBpcyBzdGlsbCBvbiBkZWxpdmVyeSBtaXNzaW9uBAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEBnVubG9jawkA/AcEBQ9lY29ub215Q29udHJhY3QCFHVwZGF0ZURlbGl2ZXJ5TG9ja2VkCQDMCAIJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawMDAwUFY2hlY2sJAGcCAAAFBW5ld0hQBwYJAGcCAAAFCWN1ckhlYWx0aAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkCQBkAgUJc3RhcnRUaW1lBRNERUxJVkVSWV9QVU5JU0hNRU5UBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJUKAwUOb3V0Y29tZUFjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ1zYXZlZExvY2F0aW9uBQNuaWwFDXNhdmVkTG9jYXRpb24BDW1lcmdlSW50ZXJuYWwGC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIdbWVyZ2VJbnRlcm5hbF9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIbbWVyZ2VJbnRlcm5hbF9jaGVja0RlbGl2ZXJ5CgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl82BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQGY1Byb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MDXzEwBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQLc3VtVGVycmFpbnMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfOQUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEBWxhbmRzCAUDYWNjAl83BANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQECWN1c3RvbUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQULbGFuZEFzc2V0SWQECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VzdG9tS2V5AgAJAJwKCgUIc2l6ZXNPdXQFBGFydHMFCWNvbnRpbmVudAUFYnBSZXMJAM4IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEDCQECIT0CBQpjdXN0b21OYW1lAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQUDbmlsBQNuaWwFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMFC3N1bVRlcnJhaW5zBQZjUHJvcHMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEBWNvbnQwCQCRAwIJALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBCQCRAwIFDGxhbmRBc3NldElkcwAAC2Rlc2NyaXB0aW9uAgFfBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUFY29udDACCzBfMF8wXzBfMF8wAgFfBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFCHByb3BMaXN0BQdsYW5kc0luAAAJALUJAgILMF8wXzBfMF8wXzACAV8FCWNvbnRQcm9wcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQETZ2VuVGVycmFpbnNGb3JNZXJnZQIIBQFyAl85CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEFC25ld0xhbmRTaXplBQVTU0laRQQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAkAuQkCCAUBcgJfNgIBXwkBC1N0cmluZ0VudHJ5AgkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQljb250aW5lbnQJALkJAggFAXIDXzEwAgFfCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCBQljb250aW5lbnQJAMwIAgIBTAkAzAgCBQ5uZXdMYW5kQXNzZXRJZAUDbmlsAgFfCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEFB2Fzc2V0SWQFDm5ld0xhbmRBc3NldElkAQNzMm0CBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzAAABA20ybAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uAgRhZGRyDGxhbmRBc3NldElkcwQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAwUHJG1hdGNoMAkBA20ybAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAUFByRtYXRjaDAJAQRsMnhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAgUHJG1hdGNoMAkBBnhsMnh4bAIFBGFkZHIFDGxhbmRBc3NldElkcwkAAgECDVVua25vd24gbWVyZ2UBFWNoZWNrT3V0ZGF0ZWREZWxpdmVyeQEIdXNlckFkZHIEBGR1Y2sJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHIDCQEJaXNEZWZpbmVkAQUEZHVjawQLZHVja0Fzc2V0SWQJAQV2YWx1ZQEFBGR1Y2sEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBANsb2MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgIBXwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQDAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUQGCQBmAgkAZAIFCXN0YXJ0VGltZQUSVEVOX01JTlVURVNfTUlMTElTCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsBAloZWFsdGhLZXkJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUIbG9jSWR4SWQAAAQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAMJAAACBQZyZXdhcmQFBnJld2FyZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDNCAIEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAURZGVsaXZlcnlMb2NrZWRLZXkAAAQGdW5sb2NrCQD8BwQFD2Vjb25vbXlDb250cmFjdAIUdXBkYXRlRGVsaXZlcnlMb2NrZWQJAMwIAgkAZQIFC2xvY2tlZFRvdGFsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAUDbmlsAwkAAAIFBnVubG9jawUGdW5sb2NrAwkAZwIAAAkBEUBleHRyTmF0aXZlKDEwNTUpAQUJaGVhbHRoS2V5BQNuaWwECnB1bmlzaG1lbnQJAPwHBAUEdGhpcwILc2F2ZUludGVnZXIJAMwIAgkBFmtleURlbGl2ZXJ5RGVsYXlCeUR1Y2sBBQtkdWNrQXNzZXRJZAkAzAgCCQBkAgUJc3RhcnRUaW1lBRNERUxJVkVSWV9QVU5JU0hNRU5UBQNuaWwFA25pbAMJAAACBQpwdW5pc2htZW50BQpwdW5pc2htZW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAQtTdHJpbmdFbnRyeQIFBmxvY0tleQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUDbmlsAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBAh1c2VyQWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIJAM0IAgkBFWNoZWNrT3V0ZGF0ZWREZWxpdmVyeQEFCHVzZXJBZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAQxwcm9sb2dGbGlnaHQBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFA25pbC4BaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBC3NhdmVJbnRlZ2VyAgNrZXkGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgc2F2ZUludGVnZXIgaXMgbm90IHB1YmxpYyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUGYW1vdW50BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkFCW5ld1BpZWNlcwUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZXN1bHQBaQEJc3Rha2VEdWNrAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAZpc1JvYm8DAwUTS1NfQUxMT1dfUk9CT19EVUNLUwkAAAIIBQVhc3NldAZpc3N1ZXIFBHRoaXMHCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQULUk9CT19QUkVGSVgHAwMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAQEhAQUGaXNSb2JvBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgQgb3IgBQtST0JPX1BSRUZJWAIGIHRva2VuAwMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAQEhAQUGaXNSb2JvBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAgQgb3IgBQtST0JPX1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzggCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUNcHJvbG9nQWN0aW9ucwFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFB2FkZHJlc3MJAAIBAhdTdGFrZWQgTkZUIGlzIG5vdCB5b3VycwMJAQ9jaGVja1RvdXJuYW1lbnQBBQphc3NldElkU3RyCQACAQIbdW5zdGFrZUR1Y2tfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQphc3NldElkU3RyCQACAQIZdW5zdGFrZUR1Y2tfY2hlY2tEZWxpdmVyeQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQVtYXhIUAUGaGVhbHRoCQACAQkArAICCQCsAgICGVBsZWFzZSBoZWFsIHlvdXIgZHVjayB0byAJAKQDAQUFbWF4SFACE2hwIGJlZm9yZSB1bnN0YWtpbmcJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFA25pbAUNcHJvbG9nQWN0aW9ucwFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQ1wcm9sb2dBY3Rpb25zCQCRAwIIBQZyZXN1bHQCXzMFCGJwSWR4UmVzAWkBDGNsYWltUmVzVG9XSAIGYW1vdW50DmxhbmRBc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQ1wcm9sb2dBY3Rpb25zCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQxwcm9sb2dGbGlnaHQBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEBW5ld0hQCAUBZgJfMQQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EC25ld0xvY2F0aW9uCAUBZgJfNAMJAAACBQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uBAZuZXdMb2MJALUJAgULbmV3TG9jYXRpb24CAV8EBmlzVG91cgkAAAIJAJEDAgUGbmV3TG9jBQpsb2NJZHhUeXBlAgFUBAdpc0RlbGl2CQAAAgkAkQMCBQZuZXdMb2MFCmxvY0lkeFR5cGUCAUQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBA0kdDA3MDY1NDcwNzUxCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81BAVuZXdFcQgFDSR0MDcwNjU0NzA3NTECXzEED3Nob3VsZFplcm9CdWZmcwgFDSR0MDcwNjU0NzA3NTECXzIEDSR0MDcwNzU0NzM4NjYDCQEBIQEJAQlvbk1pc3Npb24CBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwkBASEBCQEPaXNVc3VhbExvY2F0aW9uAQULbmV3TG9jYXRpb24JAQxjaGVhdEF0dGVtcHQDBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24ABQMJAGYCBQVuZXdIUAAACQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAkAlAoCBQtjdXJMb2NhdGlvbgAAAwkBDmlzSW5Ub3VybmFtZW50AgUSdG91cm5hbWVudENvbnRyYWN0BQtjdXJMb2NhdGlvbgMJAQEhAQkBDmlzSW5Ub3VybmFtZW50AgUSdG91cm5hbWVudENvbnRyYWN0BQtuZXdMb2NhdGlvbgkAAgECKllvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiB0aGUgdG91cm5hbWVudAQFc2NvcmUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZuZXdMb2MFCGxvY0lkeElkBAZjdXJMb2MJALUJAgULY3VyTG9jYXRpb24CAV8EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAMJAQIhPQIFBXNjb3JlCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBmN1ckxvYwUIbG9jSWR4SWQAAQkBDGNoZWF0QXR0ZW1wdAMFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgAHAwkAZgIFBW5ld0hQAAAECWxvY2FsQmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QJARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQAAAQIdXBkTG9jYWwDCQBmAgUFc2NvcmUFCWxvY2FsQmVzdAkA/AcEBRJ0b3VybmFtZW50Q29udHJhY3QCDnNhdmVEdWNrUmVzdWx0CQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFBXNjb3JlBQNuaWwFA25pbAUEdW5pdAMJAAACBQh1cGRMb2NhbAUIdXBkTG9jYWwJAJQKAgULbmV3TG9jYXRpb24FBW5ld0hQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFC2N1ckxvY2F0aW9uAAADCQEBIQEJAQxpc0luRGVsaXZlcnkBBQtjdXJMb2NhdGlvbgQIc2F2ZWRMb2MJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIQYXV0b0V4aXREZWxpdmVyeQkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQVuZXdIUAkAzAgCAwUHaXNEZWxpdgICMTACAjExCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUIc2F2ZWRMb2MFCHNhdmVkTG9jAwUHaXNEZWxpdgkAlAoCBQhzYXZlZExvYwUFbmV3SFADCQBmAgUFbmV3SFAAAAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAJQKAgUIc2F2ZWRMb2MAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAQEhAQUHaXNEZWxpdgkAAgECJFlvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiBkZWxpdmVyeQMJAQEhAQkBDGlzSW5EZWxpdmVyeQEFC25ld0xvY2F0aW9uCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAA0EBXNjb3JlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGbmV3TG9jBQhsb2NJZHhJZAQGY3VyTG9jCQC1CQIFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAA4DAwkAZgIFBW5ld0hQAAAJAGYCAAEFBXNjb3JlBwkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAECHNhdmVkTG9jCQEIYXNTdHJpbmcBCQD8BwQFBHRoaXMCEGF1dG9FeGl0RGVsaXZlcnkJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFbmV3SFAJAMwIAgIFMTUtMTcJAMwIAgUFc2NvcmUFA25pbAUDbmlsAwkAAAIFCHNhdmVkTG9jBQhzYXZlZExvYwkAlAoCBQhzYXZlZExvYwUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECWxvY1RvU2F2ZQgFDSR0MDcwNzU0NzM4NjYCXzEECGhwVG9TYXZlCAUNJHQwNzA3NTQ3Mzg2NgJfMgkAlAoCCQDOCAIJAM4IAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUJbG9jVG9TYXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAUIaHBUb1NhdmUFA25pbAUNcHJvbG9nQWN0aW9ucwMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCBQVuZXdIUAAABQ94cFN1Y2Nlc3NGbGlnaHQFDHhwRmFpbEZsaWdodAJfMQgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwMDCQBmAgAABQpxdWFudGl0eUwxBgkAZgIAAAUKcXVhbnRpdHlMMgYJAGYCAAAFCnF1YW50aXR5TDMJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhRoZWFsX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhJoZWFsX2NoZWNrRGVsaXZlcnkEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0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BQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIWaGVhbEVTX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhRoZWFsRVNfY2hlY2tEZWxpdmVyeQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAvAkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBQpySWR4RWZmZWN0BAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEPY29tbWl0Rm9yUmFuZG9tAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQQEYWRkcgkApQgBCAUBaQZjYWxsZXIJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQUEYWRkcgULZmluaXNoQmxvY2sFA25pbAUNcHJvbG9nQWN0aW9ucwULZmluaXNoQmxvY2sBaQEIYnV5U0xhbmQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRFQJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0RUBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlAoCCAgFBnJlc3VsdAJfMgJfMQULYWNyZXNSZXN1bHQBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCAUBZgJfMgQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBgUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDgxMzA2ODE0MDMJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwODEzMDY4MTQwMwJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwODEzMDY4MTQwMwJfMgQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQCaWQICAUBZQJfMgJfMQQGcmVzdWx0AwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAACQCVCgMJAM4IAggFAWUCXzEDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAkAzQgCCQDNCAIJAM0IAgkAzQgCBQNuaWwJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGmV4cGVkaXRpb25fY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECGGV4cGVkaXRpb25fY2hlY2tEZWxpdmVyeQQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlQoDCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zBQthY3Jlc1Jlc3VsdAFpARBidXlTTGFuZEZvckFjcmVzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFDGFjcmVzQXNzZXRJZAkAAgECFEFDUkVTIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQxTX0NPU1RfQUNSRVMJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQxTX0NPU1RfQUNSRVMEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxhY3Jlc0Fzc2V0SWQFA2FtdAUDbmlsCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUNcHJvbG9nQWN0aW9ucwkAlAoCCAgFBnJlc3VsdAJfMgJfMQULYWNyZXNSZXN1bHQBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEFDXByb2xvZ0FjdGlvbnMICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFDnhwVXBncmFkZUluZnJhCAUGcmVzdWx0Al8zBQVNVUxUOAJfMQgFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM4IAgUGcmVzdWx0BQ1wcm9sb2dBY3Rpb25zAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24CCQClCAEIBQFpBmNhbGxlcgUMbGFuZEFzc2V0SWRzCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xBQ1wcm9sb2dBY3Rpb25zCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUHeHBNZXJnZQJfMQgFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgUDbmlsBQ1wcm9sb2dBY3Rpb25zAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwMJAGYCAAAFBWxvZnRGCQACAQIwT3BlcmF0aW9uIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgd2FyZWhvdXNlIHNwYWNlBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBDXNldEN1c3RvbU5hbWUDB2Fzc2V0SWQKY3VzdG9tTmFtZQR0eXBlBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDOCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDXByb2xvZ0FjdGlvbnMAAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUIcmVmQnlLZXkFCW9sZFBsYXllcgkAzAgCCQELU3RyaW5nRW50cnkCBQdyZWZzS2V5BQduZXdSZWZzCQDMCAIJAQtTdHJpbmdFbnRyeQIFB29sZHNLZXkFB25ld09sZHMFA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBEGRpc3RyaWJ1dGVQb2ludHMFCHN0cmVuZ3RoCGFjY3VyYWN5CWludGVsbGVjdAllbmR1cmFuY2UJZGV4dGVyaXR5BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLdmlydFdsZ0RhdGEJAQlhc0FueUxpc3QBCQD8BwQFC3dsZ0NvbnRyYWN0AhJjaGVja1dsZ1hwUkVBRE9OTFkJAMwIAgUEYWRkcgUDbmlsBQNuaWwEDXZpcnRXbGdQb2ludHMJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAQQNJHQwOTcwMjM5NzQxMwMJAGcCAAAFDXZpcnRXbGdQb2ludHMJAJQKAgAABQNuaWwEB2RlbHRhWFAJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCCXRha2VXbGdYcAkAzAgCBQRhZGRyBQNuaWwFA25pbAMJAAACBQdkZWx0YVhQBQdkZWx0YVhQCQCUCgIFDXZpcnRXbGdQb2ludHMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEFYXNJbnQBCQCRAwIFC3ZpcnRXbGdEYXRhAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlVc2VyWFABBQRhZGRyCQEFYXNJbnQBCQCRAwIFC3ZpcnRXbGdEYXRhAAIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQJd2xnUG9pbnRzCAUNJHQwOTcwMjM5NzQxMwJfMQQKd2xnQWN0aW9ucwgFDSR0MDk3MDIzOTc0MTMCXzIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUKZnJlZUtleUFjYwAABQl3bGdQb2ludHMEC2ZyZWVLZXlEdWNrCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAQOZnJlZVBvaW50c0R1Y2sJAQt2YWx1ZU9yRWxzZQIJAJ8IAQULZnJlZUtleUR1Y2sAAAQHc3VtRnJlZQkAZAIFDWZyZWVQb2ludHNBY2MFDmZyZWVQb2ludHNEdWNrBA9zdW1Ub0Rpc3RyaWJ1dGUJAGQCCQBkAgkAZAIJAGQCBQhzdHJlbmd0aAUIYWNjdXJhY3kFCWludGVsbGVjdAUJZW5kdXJhbmNlBQlkZXh0ZXJpdHkDCQBmAgUPc3VtVG9EaXN0cmlidXRlBQdzdW1GcmVlCQACAQkArAICCQCsAgICD1RoZXJlIGFyZSBvbmx5IAkApAMBBQdzdW1GcmVlAhogZnJlZSBwb2ludHMgdG8gZGlzdHJpYnV0ZQQIY2hhcnNLZXkJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmZyZWVLZXlBY2MDCQBmAgAABQZuZXdBY2MAAAUGbmV3QWNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtmcmVlS2V5RHVjawMJAGYCAAAFBm5ld0FjYwkAZAIFDmZyZWVQb2ludHNEdWNrBQZuZXdBY2MFDmZyZWVQb2ludHNEdWNrCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGNoYXJzS2V5CQC5CQIJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgFCHN0cmVuZ3RoCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5BQhhY2N1cmFjeQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QFCWludGVsbGVjdAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UFCWVuZHVyYW5jZQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkFCWRleHRlcml0eQUDbmlsAgFfBQNuaWwFDXByb2xvZ0FjdGlvbnMFCndsZ0FjdGlvbnMAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFEnRvdXJuYW1lbnRDb250cmFjdAkAzAgCBQ1hY3Jlc0NvbnRyYWN0BQNuaWwIBQFpBmNhbGxlcgkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkBBnByb2xvZwEFAWkAKgFpAQ91cGRhdGVEdWNrU3RhdHMCC2R1Y2tBc3NldElkB2RlbHRhWFADCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQdkZWx0YVhQAWkBDnVwZGF0ZUFjY1N0YXRzAgRhZGRyB2RlbHRhWFADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFD2Vjb25vbXlDb250cmFjdAkAzAgCBQ1hY3Jlc0NvbnRyYWN0BQNuaWwIBQFpBmNhbGxlcgkAAgECDUFjY2VzcyBkZW5pZWQJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUHZGVsdGFYUAFpAQllcXVpcER1Y2sBCWVxdWlwbWVudAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGWVxdWlwRHVja19jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIXZXF1aXBEdWNrX2NoZWNrRGVsaXZlcnkEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQJdGVtcFByb2RCCQEGZHJlc3NCBAULY3VycmVudFNlZ3MJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAYFA25pbAQIc2VnQnBBdXgJAJEDAgkAtQkCCQCRAwIFBW5ld0VxBQtzZWdCYWNrcGFjawIBOwABBApidWZmRWZmZWN0AwkAAAIFCHNlZ0JwQXV4AgAAAAQEYXV4MAkAkQMCCQC1CQIFCHNlZ0JwQXV4AgEsAAADCQAAAgUEYXV4MAIAAAAEBmlkeENudAkAtQkCBQRhdXgwAgE6BANpZHgJAJEDAgUGaWR4Q250AAAEA2NudAkAkQMCBQZpZHhDbnQAAQMDAwMDCQAAAgUDaWR4AgIwNgYJAAACBQNpZHgCAjA3BgkAAAIFA2lkeAICMDgJAQIhPQIFA2NudAIABwkAZgIJAQ1wYXJzZUludFZhbHVlAQUDY250AAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgJAQ1wYXJzZUludFZhbHVlAQUDaWR4AgFfBQpySWR4RWZmZWN0AAAEBXN0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQFCmJ1ZmZFZmZlY3QGBAhuZXdQcm9kQgkBBmRyZXNzQgQFBW5ld0VxBQl0ZW1wUHJvZEIHBQVzdGF0cwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIJAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIFCm5ld1Byb2RTdHIFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCQCkAwEJAJEDAgUFc3RhdHMABwkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACAkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACQkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACgkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACwUDbmlsAgFfBQNuaWwFDXByb2xvZ0FjdGlvbnMAAAFpAQ9mb3J0aWZpY2F0ZUxhbmQCC2xhbmRBc3NldElkBHBsYW4EDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAECWR1Y2tTdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkAAAHBAdmb3J0S2V5CQEXa2V5Rm9ydGlmaWNhdGlvbnNCeUxhbmQBBQtsYW5kQXNzZXRJZAQMY3VycmVudEZvcnRzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUHZm9ydEtleQIMOjBfMTU6MF8xODowAgFfBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAdjdXJMb2Z0CQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwQEY3VyTwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2N1ckxvZnQFC3ZvbE9jY3VwaWVkBARjdXJGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAUHdm9sRnJlZQQIbmV3Rm9ydHMJALUJAgUEcGxhbgIBXwQPJHQwMTA0MjUxMTA0MzY2CQEFZm9ydEIGBQxjdXJyZW50Rm9ydHMJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgUCd2gFCXdoSWR4UHJvZAUEY3VyTwUEY3VyRgYFA25pbAQJdGVtcFByb2RCCAUPJHQwMTA0MjUxMTA0MzY2Al8xBAV0ZW1wTwgFDyR0MDEwNDI1MTEwNDM2NgJfMgQFdGVtcEYIBQ8kdDAxMDQyNTExMDQzNjYCXzMEDyR0MDEwNDM2OTEwNDQ2NQkBBWZvcnRCBgUIbmV3Rm9ydHMFCXRlbXBQcm9kQgUFdGVtcE8FBXRlbXBGBwUJZHVja1N0YXRzBAhuZXdQcm9kQggFDyR0MDEwNDM2OTEwNDQ2NQJfMQQEbmV3TwgFDyR0MDEwNDM2OTEwNDQ2NQJfMgQEbmV3RggFDyR0MDEwNDM2OTEwNDQ2NQJfMwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFB2N1ckxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBG5ld08JAMwIAgkApAMBBQRuZXdGCQDMCAIJAJEDAgUHY3VyTG9mdAUIdm9sVG90YWwFA25pbAIBXwkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHZm9ydEtleQUEcGxhbgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIFCm5ld1Byb2RTdHIJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwFDXByb2xvZ0FjdGlvbnMAAAFpARNpbml0RHVja1RvdXJBdHRlbXB0AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQMdG91ckxvY2F0aW9uCQCsAgIJAKQDAQUGbGFzdElkAgRfVF8wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBQljdXJIZWFsdGgJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbWF4SFAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAULY3VyTG9jYXRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BQx0b3VyTG9jYXRpb24FA25pbAUMdG91ckxvY2F0aW9uAWkBDGJyZWFrQXR0ZW1wdAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQECIT0CCQCRAwIJALUJAgULY3VyTG9jYXRpb24CAV8FCmxvY0lkeFR5cGUCAVQJAAIBAiJZb3VyIGR1Y2sgaXMgbm90IGluIHRoZSB0b3VybmFtZW50BAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzQgCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BQ1zYXZlZExvY2F0aW9uBQtjdXJMb2NhdGlvbgFpARRicmVha0F0dGVtcHRDYWxsYmFjawADCQECIT0CCAUBaQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQNuaWwCFGJyZWFrQXR0ZW1wdENhbGxiYWNrAWkBFmV4aXRUb3VybmFtZW50SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUNc2F2ZWRMb2NhdGlvbgUDbmlsBwFpARRleGl0RGVsaXZlcnlJbnRlcm5hbAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBAFlCQESZXhpdERlbGl2ZXJ5Q29tbW9uBAULZHVja0Fzc2V0SWQHAAAAAAkAlAoCCQDOCAIIBQFlAl8xCAUBZQJfMgcBaQEQYXV0b0V4aXREZWxpdmVyeQQLZHVja0Fzc2V0SWQFbmV3SFAGcmVhc29uBXNjb3JlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQBZQkBEmV4aXREZWxpdmVyeUNvbW1vbgQFC2R1Y2tBc3NldElkBgUFbmV3SFAFBXNjb3JlCQCUCgIIBQFlAl8xCAUBZQJfMwFpAQ1icmVha0RlbGl2ZXJ5AAkAlAoCCQEGcHJvbG9nAQUBaQINYnJlYWtEZWxpdmVyeQFpAQ5wcmVwYXJlUm9iYmVyeQIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCAXwDCQBmAgACCQCQAwEFBXBhcnRzCQACAQIUV3JvbmcgbWVzc2FnZSBmb3JtYXQECXR4RnJvbU1zZwMJAGcCCQCQAwEFBXBhcnRzAAIJAJEDAgUFcGFydHMAAgIABAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkAkQMCBQVwYXJ0cwAAAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIecHJlcGFyZVJvYmJlcnlfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECHHByZXBhcmVSb2JiZXJ5X2NoZWNrRGVsaXZlcnkEB3JvYkNvc3QICQEOZ2V0Um9iYmVyeURhdGECBQR0aGlzBQtkdWNrQXNzZXRJZAJfMQMJAGYCBQdyb2JDb3N0BQZ3bGdBbXQJAAIBCQCsAgIJAKwCAgkArAICAghQYXltZW50IAkApAMBBQZ3bGdBbXQCDCA8IHJlcXVpcmVkIAkApAMBBQdyb2JDb3N0BApjYW5kaWRhdGVzCQC1CQIJAJEDAgUFcGFydHMAAQIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQAAAQKbG9ja2VkTGFuZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkAgAEB2xhbmRFVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAMDCQECIT0CBQlkdWNrU3RhdGUFC2R1Y2tJZHhGcmVlCQBmAgUHbGFuZEVUQQUDbm93BwkAAgEJAKwCAgInWW91IGFscmVhZHkgc3RhcnRlZCByb2JiaW5nLCB3YWl0IHRpbGwgCQCkAwEFB2xhbmRFVEEKAQdjaGVja2VyAgNhY2MLbGFuZEFzc2V0SWQEBXN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlMYW5kUm9iYmVyeVN0YXRlAQULbGFuZEFzc2V0SWQAAAQLY29vbGRvd25FVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFC2xhbmRBc3NldElkAAADCQBmAgUFc3RhdGUJAJADAQUQbGFuZFJvYkNvb2xkb3ducwkAAgECDUludmFsaWQgc3RhdGUDCQBmAgUDbm93BQtjb29sZG93bkVUQQQKc3Rha2VkVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAADCQBnAgAABQpzdGFrZWRUaW1lBQNhY2MEAWEJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQBZAkAtQkCCAUBYQtkZXNjcmlwdGlvbgIBXwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQMcHJvZHVjdGl2aXR5CQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJZGVsdGFUaW1lCQBlAgUDbm93BQpzdGFrZWRUaW1lBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFDHByb2R1Y3Rpdml0eQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUOTUlOX1JFU19UT19ST0IFCGF2YWlsUmVzBQNhY2MJAM0IAgUDYWNjBQtsYW5kQXNzZXRJZAUDYWNjBAhmaWx0ZXJlZAoAAiRsBQpjYW5kaWRhdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIJAJADAQUIZmlsdGVyZWQAAAkAAgECGU5vIGNhbmRpZGF0ZXMgZm9yIHJvYmJlcnkEBnJuZElkeAkBD2dldFJhbmRvbU51bWJlcgMJAJADAQUIZmlsdGVyZWQFB21lc3NhZ2UFA3NpZwQLbGFuZEFzc2V0SWQJAJEDAgUIZmlsdGVyZWQFBnJuZElkeAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlMYW5kUm9iYmVyeVN0YXRlAQULbGFuZEFzc2V0SWQFDHJvYklkeExvY2tlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleUxhbmRDb29sZG93bkVUQQEFC2xhbmRBc3NldElkCQBkAgUDbm93CQCRAwIFEGxhbmRSb2JDb29sZG93bnMFDHJvYklkeExvY2tlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAUQZHVja0lkeFByZXBhcmluZwkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkBQtsYW5kQXNzZXRJZAUDbmlsBQ1wcm9sb2dBY3Rpb25zBQtsYW5kQXNzZXRJZAFpAQdyb2JMYW5kAgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAlAoCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCCQEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQULZHVja0Fzc2V0SWQFA25vdwAAAWkBDmFjY2VwdERlbGl2ZXJ5AAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAURZGVsaXZlcnlMb2NrZWRLZXkAAAMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkJAGUCBQlmdW5kVG90YWwFC2xvY2tlZFRvdGFsCQACAQkArAICCQCsAgIJAKwCAgIgRGVsaXZlcnkgaXMgbm90IGF2YWlsYWJsZSwgZnVuZD0JAQpmaXhlZFBvaW50AgUJZnVuZFRvdGFsAAYCCSwgbG9ja2VkPQkBCmZpeGVkUG9pbnQCBQtsb2NrZWRUb3RhbAAGBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAhkZWxheUVUQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkAAADCQBmAgUIZGVsYXlFVEEFA25vdwkAAgEJAKwCAgIqRGVsaXZlcnkgaXMgZm9yYmlkZGVuIGZvciB5b3VyIGR1Y2sgdW50aWwgCQCkAwEFCGRlbGF5RVRBBAZoZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQDCQBnAgAABQZoZWFsdGgJAAIBAitZb3UgY2Fubm90IGFjY2VwdCBkZWxpdmVyeSB3aXRoIHplcm8gaGVhbHRoBAhjb3VudEtleQkBFGtleVVzZXJEZWxpdmVyeUNvdW50AQUIdXNlckFkZHIEBWNvdW50CQELdmFsdWVPckVsc2UCCQCfCAEFCGNvdW50S2V5AAAEB2xhc3REYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBQh1c2VyQWRkcgAABAV0b2RheQkAaQIFA25vdwUJREFZTUlMTElTBAVhY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1hY3Jlc0NvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQh1c2VyQWRkcgAABBFhbGxvd2VkRGVsaXZlcmllcwkAZAIFF0FMTE9XRURfRlJFRV9ERUxJVkVSSUVTCQBpAgUFYWNyZXMFGkFDUkVTX0ZPUl9ERUxJVkVSWV9BVFRFTVBUAwMJAGcCBQVjb3VudAURYWxsb3dlZERlbGl2ZXJpZXMJAAACBQdsYXN0RGF5BQV0b2RheQcJAAIBCQCsAgIJAKwCAgIRWW91IGFscmVhZHkgdXNlZCAJAKQDAQURYWxsb3dlZERlbGl2ZXJpZXMCHCBkZWxpdmVyeSBhdHRlbXB0cyBmb3IgdG9kYXkDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAh5hY2NlcHREZWxpdmVyeV9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIcYWNjZXB0RGVsaXZlcnlfY2hlY2tEZWxpdmVyeQQObmV3TG9ja2VkVG90YWwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhR1cGRhdGVEZWxpdmVyeUxvY2tlZAkAzAgCCQBkAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBQNuaWwECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQQZGVsaXZlcnlMb2NhdGlvbgkArAICCQCkAwEFA25vdwIEX0RfMAkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAULY3VyTG9jYXRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BRBkZWxpdmVyeUxvY2F0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQMJAQIhPQIFB2xhc3REYXkFBXRvZGF5AAAFBWNvdW50BQNuaWwFDXByb2xvZ0FjdGlvbnMJAJQKAgUQZGVsaXZlcnlMb2NhdGlvbgUObmV3TG9ja2VkVG90YWwBaQEVY2hlY2tEZWxpdmVyeUNhbGxiYWNrAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkAlAoCBQNuaWwJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQBaQELYnV5Um9ib0R1Y2sAAwkBASEBBRNLU19BTExPV19ST0JPX0RVQ0tTCQACAQIVRmVhdHVyZSBpcyB0dXJuZWQgb2ZmBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDlJPQk9fRFVDS19VU0RUCQACAQkArAICCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkBCmZpeGVkUG9pbnQCBQ5ST0JPX0RVQ0tfVVNEVAAGAgUgVVNEVAQHbmV4dE51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEPa2V5TmV4dFJvYm9EdWNrAAAABAVieXRlegkAmgMBBQduZXh0TnVtBARuYW1lCQCsAgIJAKwCAgULUk9CT19QUkVGSVgCAS0JALICAgkA3AQBBQVieXRlegAIBAVjb2xvcgkAsgICCQDcBAEJANQWAQUFYnl0ZXoABgQFaXNzdWUJAMIIBQUEbmFtZQkArAICAjdSb2JvIER1Y2sgTkZUIGZvciBXYXZlc0xhbmRzIGdhbWUsIGJhY2tncm91bmQgY29sb3IgPSAjBQVjb2xvcgABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAQ9rZXlOZXh0Um9ib0R1Y2sACQBkAgUHbmV4dE51bQABBQVpc3N1ZQkBDlNjcmlwdFRyYW5zZmVyAwgFAWkMb3JpZ2luQ2FsbGVyAAEFB2Fzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCQCUCgIJANgEAQUHYXNzZXRJZAUFY29sb3IApXAYOQ==", "height": 2840066, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CwuQiMjdhptCN94m3MrixMsibm3Chv5dhRmxkdBVrrzW Next: 7fD6oRtzNkHJ7eQCB8ea6S7EmwnthUWpPWcJ9HbSJ9S8 Diff:
Old | New | Differences | |
---|---|---|---|
175 | 175 | ||
176 | 176 | let aG = "DUCK" | |
177 | 177 | ||
178 | - | let aH = " | |
179 | - | ||
180 | - | let aI = | |
181 | - | ||
182 | - | let aJ = | |
183 | - | ||
184 | - | let aK = | |
185 | - | ||
186 | - | let aL = | |
187 | - | ||
188 | - | let aM = | |
189 | - | ||
190 | - | let aN = | |
191 | - | ||
192 | - | let aO = | |
193 | - | ||
194 | - | let aP = | |
195 | - | ||
196 | - | let aQ = | |
197 | - | ||
198 | - | let aR = | |
199 | - | ||
200 | - | let aS = | |
201 | - | ||
202 | - | let aT = | |
203 | - | ||
204 | - | let aU = [" | |
205 | - | ||
206 | - | let aV = | |
207 | - | ||
208 | - | let aW = | |
209 | - | ||
210 | - | let aX = [ | |
211 | - | ||
212 | - | let aY = | |
213 | - | ||
214 | - | let aZ = | |
215 | - | ||
216 | - | let ba = | |
217 | - | ||
218 | - | let bb = | |
178 | + | let aH = "ROBO" | |
179 | + | ||
180 | + | let aI = "PRESALE" | |
181 | + | ||
182 | + | let aJ = 6 | |
183 | + | ||
184 | + | let aK = 25 | |
185 | + | ||
186 | + | let aL = 3456000 | |
187 | + | ||
188 | + | let aM = 10000000000 | |
189 | + | ||
190 | + | let aN = "Africa_F_Africa" | |
191 | + | ||
192 | + | let aO = 39637 | |
193 | + | ||
194 | + | let aP = 10 | |
195 | + | ||
196 | + | let aQ = 50000 | |
197 | + | ||
198 | + | let aR = 600000 | |
199 | + | ||
200 | + | let aS = 1 | |
201 | + | ||
202 | + | let aT = 50000000 | |
203 | + | ||
204 | + | let aU = ["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"] | |
205 | + | ||
206 | + | let aV = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
207 | + | ||
208 | + | let aW = 10000000 | |
209 | + | ||
210 | + | let aX = [15, 16, 17, 18, 19, 20] | |
211 | + | ||
212 | + | let aY = ["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_"] | |
213 | + | ||
214 | + | let aZ = 6 | |
215 | + | ||
216 | + | let ba = 8 | |
217 | + | ||
218 | + | let bb = 9 | |
219 | 219 | ||
220 | 220 | let bc = 10 | |
221 | 221 | ||
222 | - | let bd = 0 | |
223 | - | ||
224 | - | let be = 1 | |
225 | - | ||
226 | - | let bf = 2 | |
227 | - | ||
228 | - | let bg = 3 | |
229 | - | ||
230 | - | let bh = 4 | |
231 | - | ||
232 | - | let bi = 0 | |
233 | - | ||
234 | - | let bj = 1 | |
235 | - | ||
236 | - | let bk = 2 | |
237 | - | ||
238 | - | let bl = 3 | |
239 | - | ||
240 | - | let bm = 0 | |
241 | - | ||
242 | - | let bn = 1 | |
243 | - | ||
244 | - | let bo = 2 | |
245 | - | ||
246 | - | let bp = 3 | |
247 | - | ||
248 | - | let bq = 0 | |
249 | - | ||
250 | - | let br = 1 | |
251 | - | ||
252 | - | let bs = 2 | |
253 | - | ||
254 | - | func bt (bu) = ("no_" + bu) | |
255 | - | ||
256 | - | ||
257 | - | func bv (bu) = ("lcna_" + bu) | |
258 | - | ||
259 | - | ||
260 | - | func bw (bu) = ("st_" + bu) | |
261 | - | ||
262 | - | ||
263 | - | func bx (by,bu) = makeString(["las", by, bu], "_") | |
264 | - | ||
265 | - | ||
266 | - | func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB) | |
267 | - | ||
268 | - | ||
269 | - | func bC (Q) = ("wh_" + Q) | |
270 | - | ||
271 | - | ||
272 | - | func bD (bu) = ("infraLevel_" + bu) | |
273 | - | ||
274 | - | ||
275 | - | func bE (Q) = ("fortifications_" + Q) | |
276 | - | ||
277 | - | ||
278 | - | func bF (bu) = ("duckCustomNameByAssetId_" + bu) | |
279 | - | ||
280 | - | ||
281 | - | func bG (c) = ("accountCustomNameByAddr_" + c) | |
282 | - | ||
283 | - | ||
284 | - | func bH (c) = ("accRefBy_" + c) | |
285 | - | ||
286 | - | ||
287 | - | func bI (B) = ("onboardArtActivatedOnDuck_" + B) | |
288 | - | ||
289 | - | ||
290 | - | func bJ (c) = ("onboardArtActivatedDuckBy_" + c) | |
291 | - | ||
292 | - | ||
293 | - | func bK (c) = ("accReferrals_" + c) | |
294 | - | ||
295 | - | ||
296 | - | func bL (bu) = ("duckOwner_" + bu) | |
297 | - | ||
298 | - | ||
299 | - | func bM (bB) = ("stakedDuckByOwner_" + bB) | |
300 | - | ||
301 | - | ||
302 | - | func bN (B) = ("backPack_" + B) | |
303 | - | ||
304 | - | ||
305 | - | func bO (B) = ("duckLocation_" + B) | |
306 | - | ||
307 | - | ||
308 | - | func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ) | |
309 | - | ||
310 | - | ||
311 | - | func bR () = "emergencyWarehouseProducts" | |
312 | - | ||
313 | - | ||
314 | - | let bS = "deliveryFund" | |
315 | - | ||
316 | - | let bT = "deliveryLocked" | |
317 | - | ||
318 | - | let bU = "%s__lastTourId" | |
319 | - | ||
320 | - | func bV (bW) = ("%s%d__tourStaticData__" + toString(bW)) | |
321 | - | ||
322 | - | ||
323 | - | func bX (bW) = ("%s%d__tourDynamicData__" + toString(bW)) | |
324 | - | ||
325 | - | ||
326 | - | func bY (bW,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bW), B], "__") | |
327 | - | ||
328 | - | ||
329 | - | let bZ = 0 | |
330 | - | ||
331 | - | let ca = 1 | |
332 | - | ||
333 | - | let cb = 6 | |
334 | - | ||
335 | - | let cc = 1 | |
336 | - | ||
337 | - | func cd (ce,bW) = { | |
338 | - | let cf = split(valueOrErrorMessage(getString(ce, bV(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__") | |
339 | - | let cg = split_4C(valueOrErrorMessage(getString(ce, bX(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__") | |
340 | - | [cf, cg] | |
341 | - | } | |
342 | - | ||
343 | - | ||
344 | - | func ch (ce,ci) = { | |
345 | - | let cj = valueOrElse(getInteger(ce, bU), 0) | |
346 | - | let ck = split(ci, "_") | |
222 | + | let bd = 10 | |
223 | + | ||
224 | + | let be = 0 | |
225 | + | ||
226 | + | let bf = 1 | |
227 | + | ||
228 | + | let bg = 2 | |
229 | + | ||
230 | + | let bh = 3 | |
231 | + | ||
232 | + | let bi = 4 | |
233 | + | ||
234 | + | let bj = 0 | |
235 | + | ||
236 | + | let bk = 1 | |
237 | + | ||
238 | + | let bl = 2 | |
239 | + | ||
240 | + | let bm = 3 | |
241 | + | ||
242 | + | let bn = 0 | |
243 | + | ||
244 | + | let bo = 1 | |
245 | + | ||
246 | + | let bp = 2 | |
247 | + | ||
248 | + | let bq = 3 | |
249 | + | ||
250 | + | let br = 0 | |
251 | + | ||
252 | + | let bs = 1 | |
253 | + | ||
254 | + | let bt = 2 | |
255 | + | ||
256 | + | func bu (bv) = ("no_" + bv) | |
257 | + | ||
258 | + | ||
259 | + | func bw (bv) = ("lcna_" + bv) | |
260 | + | ||
261 | + | ||
262 | + | func bx (bv) = ("st_" + bv) | |
263 | + | ||
264 | + | ||
265 | + | func by (bz,bv) = makeString(["las", bz, bv], "_") | |
266 | + | ||
267 | + | ||
268 | + | func bA (bB,bv,bC) = ((((("sttao_" + bB) + "_") + bv) + "_") + bC) | |
269 | + | ||
270 | + | ||
271 | + | func bD (Q) = ("wh_" + Q) | |
272 | + | ||
273 | + | ||
274 | + | func bE (bv) = ("infraLevel_" + bv) | |
275 | + | ||
276 | + | ||
277 | + | func bF (Q) = ("fortifications_" + Q) | |
278 | + | ||
279 | + | ||
280 | + | func bG (bv) = ("duckCustomNameByAssetId_" + bv) | |
281 | + | ||
282 | + | ||
283 | + | func bH (c) = ("accountCustomNameByAddr_" + c) | |
284 | + | ||
285 | + | ||
286 | + | func bI (c) = ("accRefBy_" + c) | |
287 | + | ||
288 | + | ||
289 | + | func bJ (B) = ("onboardArtActivatedOnDuck_" + B) | |
290 | + | ||
291 | + | ||
292 | + | func bK (c) = ("onboardArtActivatedDuckBy_" + c) | |
293 | + | ||
294 | + | ||
295 | + | func bL (c) = ("accReferrals_" + c) | |
296 | + | ||
297 | + | ||
298 | + | func bM (bv) = ("duckOwner_" + bv) | |
299 | + | ||
300 | + | ||
301 | + | func bN (bC) = ("stakedDuckByOwner_" + bC) | |
302 | + | ||
303 | + | ||
304 | + | func bO (B) = ("backPack_" + B) | |
305 | + | ||
306 | + | ||
307 | + | func bP (B) = ("duckLocation_" + B) | |
308 | + | ||
309 | + | ||
310 | + | func bQ (bR) = ("%s%s__userGwlReleaseTime__" + bR) | |
311 | + | ||
312 | + | ||
313 | + | func bS () = "emergencyWarehouseProducts" | |
314 | + | ||
315 | + | ||
316 | + | let bT = "deliveryFund" | |
317 | + | ||
318 | + | let bU = "deliveryLocked" | |
319 | + | ||
320 | + | let bV = "%s__lastTourId" | |
321 | + | ||
322 | + | func bW (bX) = ("%s%d__tourStaticData__" + toString(bX)) | |
323 | + | ||
324 | + | ||
325 | + | func bY (bX) = ("%s%d__tourDynamicData__" + toString(bX)) | |
326 | + | ||
327 | + | ||
328 | + | func bZ (bX,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bX), B], "__") | |
329 | + | ||
330 | + | ||
331 | + | let ca = 0 | |
332 | + | ||
333 | + | let cb = 1 | |
334 | + | ||
335 | + | let cc = 6 | |
336 | + | ||
337 | + | let cd = 1 | |
338 | + | ||
339 | + | func ce (cf,bX) = { | |
340 | + | let cg = split(valueOrErrorMessage(getString(cf, bW(bX)), (("Error reading tournament " + toString(bX)) + " data")), "__") | |
341 | + | let ch = split_4C(valueOrErrorMessage(getString(cf, bY(bX)), (("Error reading tournament " + toString(bX)) + " data")), "__") | |
342 | + | [cg, ch] | |
343 | + | } | |
344 | + | ||
345 | + | ||
346 | + | func ci (cf,cj) = { | |
347 | + | let ck = valueOrElse(getInteger(cf, bV), 0) | |
348 | + | let cl = split(cj, "_") | |
347 | 349 | let aA = lastBlock.timestamp | |
348 | - | let | |
349 | - | let | |
350 | - | let | |
351 | - | if (if (if (( | |
352 | - | then (parseIntValue( | |
350 | + | let cm = ce(cf, ck) | |
351 | + | let cg = cm[ca] | |
352 | + | let ch = cm[cb] | |
353 | + | if (if (if ((cl[bs] == "T")) | |
354 | + | then (parseIntValue(cl[br]) == ck) | |
353 | 355 | else false) | |
354 | - | then ( | |
356 | + | then (ch[cd] == "INPROGRESS") | |
355 | 357 | else false) | |
356 | - | then (parseIntValue( | |
358 | + | then (parseIntValue(cg[cc]) > aA) | |
357 | 359 | else false | |
358 | 360 | } | |
359 | 361 | ||
360 | 362 | ||
361 | - | func | |
362 | - | let | |
363 | + | func cn (cj) = { | |
364 | + | let cl = split(cj, "_") | |
363 | 365 | let aA = lastBlock.timestamp | |
364 | - | let | |
365 | - | let | |
366 | - | if (if (( | |
367 | - | then (( | |
366 | + | let co = parseIntValue(cl[br]) | |
367 | + | let cp = parseIntValue(cl[bt]) | |
368 | + | if (if ((cl[bs] == "D")) | |
369 | + | then ((co + aR) > aA) | |
368 | 370 | else false) | |
369 | - | then (3 >= | |
371 | + | then (3 >= cp) | |
370 | 372 | else false | |
371 | 373 | } | |
372 | 374 | ||
373 | 375 | ||
374 | - | func | |
375 | - | let | |
376 | - | if (( | |
377 | - | then ( | |
376 | + | func cq (cj) = { | |
377 | + | let cr = split(cj, "_")[bs] | |
378 | + | if ((cr != "T")) | |
379 | + | then (cr != "D") | |
378 | 380 | else false | |
379 | 381 | } | |
380 | 382 | ||
381 | 383 | ||
382 | - | func | |
383 | - | let | |
384 | - | let | |
384 | + | func cs (cf,cj) = { | |
385 | + | let ck = valueOrElse(getInteger(cf, bV), 0) | |
386 | + | let cl = split(cj, "_") | |
385 | 387 | let aA = lastBlock.timestamp | |
386 | - | let | |
387 | - | let | |
388 | - | let | |
389 | - | let | |
390 | - | if (( | |
388 | + | let cm = ce(cf, ck) | |
389 | + | let cg = cm[ca] | |
390 | + | let ch = cm[cb] | |
391 | + | let cr = cl[bs] | |
392 | + | if ((cr == "D")) | |
391 | 393 | then true | |
392 | - | else if (if (if (( | |
393 | - | then (parseIntValue( | |
394 | + | else if (if (if ((cl[bs] == "T")) | |
395 | + | then (parseIntValue(cl[br]) == ck) | |
394 | 396 | else false) | |
395 | - | then ( | |
397 | + | then (ch[cd] == "INPROGRESS") | |
396 | 398 | else false) | |
397 | - | then (parseIntValue( | |
399 | + | then (parseIntValue(cg[cc]) > aA) | |
398 | 400 | else false | |
399 | 401 | } | |
400 | 402 | ||
401 | 403 | ||
402 | - | func cs (ct) = (parseIntValue(ct[aY]) * aV) | |
403 | - | ||
404 | - | ||
405 | - | func cu (cv,cw,cx) = throw(((((("Cheat attempt: oldLoc=" + cv) + ", newLoc=") + cw) + ", case=") + toString(cx))) | |
406 | - | ||
407 | - | ||
408 | - | let cy = false | |
404 | + | func ct (cu) = (parseIntValue(cu[aZ]) * aW) | |
405 | + | ||
406 | + | ||
407 | + | func cv (cw,cx,cy) = throw(((((("Cheat attempt: oldLoc=" + cw) + ", newLoc=") + cx) + ", case=") + toString(cy))) | |
408 | + | ||
409 | 409 | ||
410 | 410 | let cz = false | |
411 | 411 | ||
412 | - | let cA = 86400000 | |
413 | - | ||
414 | - | let cB = take(drop(this.bytes, 1), 1) | |
415 | - | ||
416 | - | let cC = { | |
417 | - | let cD = cB | |
418 | - | if ((base58'2W' == cD)) | |
412 | + | let cA = false | |
413 | + | ||
414 | + | let cB = true | |
415 | + | ||
416 | + | let cC = 86400000 | |
417 | + | ||
418 | + | let cD = take(drop(this.bytes, 1), 1) | |
419 | + | ||
420 | + | let cE = { | |
421 | + | let cF = cD | |
422 | + | if ((base58'2W' == cF)) | |
419 | 423 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
420 | - | else if ((base58'2T' == | |
424 | + | else if ((base58'2T' == cF)) | |
421 | 425 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
422 | 426 | else throw("Unknown chain") | |
423 | 427 | } | |
424 | 428 | ||
425 | - | let | |
426 | - | let | |
427 | - | if ((base58'2W' == | |
429 | + | let cG = { | |
430 | + | let cF = cD | |
431 | + | if ((base58'2W' == cF)) | |
428 | 432 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
429 | - | else if ((base58'2T' == | |
433 | + | else if ((base58'2T' == cF)) | |
430 | 434 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
431 | 435 | else throw("Unknown chain") | |
432 | 436 | } | |
433 | 437 | ||
434 | - | let | |
435 | - | let | |
436 | - | if ((base58'2W' == | |
438 | + | let cH = { | |
439 | + | let cF = cD | |
440 | + | if ((base58'2W' == cF)) | |
437 | 441 | then 10000000000 | |
438 | - | else if ((base58'2T' == | |
442 | + | else if ((base58'2T' == cF)) | |
439 | 443 | then 100000000 | |
440 | 444 | else throw("Unknown chain") | |
441 | 445 | } | |
442 | 446 | ||
443 | - | let | |
444 | - | let | |
445 | - | if ((base58'2W' == | |
446 | - | then | |
447 | - | else if ((base58'2T' == | |
447 | + | let cI = { | |
448 | + | let cF = cD | |
449 | + | if ((base58'2W' == cF)) | |
450 | + | then cC | |
451 | + | else if ((base58'2T' == cF)) | |
448 | 452 | then 60000 | |
449 | 453 | else throw("Unknown chain") | |
450 | 454 | } | |
451 | 455 | ||
452 | - | let | |
453 | - | let | |
454 | - | if ((base58'2W' == | |
456 | + | let cJ = { | |
457 | + | let cF = cD | |
458 | + | if ((base58'2W' == cF)) | |
455 | 459 | then 10800000 | |
456 | - | else if ((base58'2T' == | |
460 | + | else if ((base58'2T' == cF)) | |
457 | 461 | then 900000 | |
458 | 462 | else throw("Unknown chain") | |
459 | 463 | } | |
460 | 464 | ||
461 | - | let | |
462 | - | ||
463 | - | let | |
464 | - | ||
465 | - | let | |
466 | - | ||
467 | - | let | |
468 | - | ||
469 | - | let | |
470 | - | ||
471 | - | let | |
472 | - | ||
473 | - | let | |
474 | - | ||
475 | - | let | |
476 | - | ||
477 | - | let | |
478 | - | ||
479 | - | func | |
480 | - | ||
481 | - | ||
482 | - | let | |
483 | - | ||
484 | - | let | |
485 | - | ||
486 | - | let | |
487 | - | ||
488 | - | let | |
489 | - | ||
490 | - | let | |
491 | - | ||
492 | - | let | |
493 | - | ||
494 | - | func | |
495 | - | ||
496 | - | ||
497 | - | func | |
498 | - | ||
499 | - | ||
500 | - | func | |
501 | - | ||
502 | - | ||
503 | - | func | |
504 | - | ||
505 | - | ||
506 | - | let | |
507 | - | ||
508 | - | let | |
509 | - | ||
510 | - | let aq = | |
511 | - | ||
512 | - | let | |
513 | - | ||
514 | - | let | |
515 | - | ||
516 | - | let | |
517 | - | ||
518 | - | let | |
519 | - | ||
520 | - | let | |
521 | - | ||
522 | - | let | |
523 | - | ||
524 | - | let | |
525 | - | ||
526 | - | let | |
527 | - | ||
528 | - | let | |
529 | - | ||
530 | - | let | |
531 | - | ||
532 | - | let | |
533 | - | ||
534 | - | let | |
535 | - | ||
536 | - | let | |
537 | - | ||
538 | - | let | |
539 | - | ||
540 | - | func | |
541 | - | ||
542 | - | ||
543 | - | func | |
544 | - | ||
545 | - | ||
546 | - | func | |
547 | - | ||
548 | - | ||
549 | - | func | |
550 | - | ||
551 | - | ||
552 | - | func | |
553 | - | ||
554 | - | ||
555 | - | func | |
556 | - | let | |
557 | - | if ($isInstanceOf( | |
465 | + | let cK = "__" | |
466 | + | ||
467 | + | let cL = 1000000 | |
468 | + | ||
469 | + | let cM = 100000000 | |
470 | + | ||
471 | + | let cN = 25 | |
472 | + | ||
473 | + | let cO = 100 | |
474 | + | ||
475 | + | let cP = 225 | |
476 | + | ||
477 | + | let cQ = 400 | |
478 | + | ||
479 | + | let cR = 625 | |
480 | + | ||
481 | + | let cS = [0, 1, 2, 3, 4, 5] | |
482 | + | ||
483 | + | func cT (cU,cV) = valueOrErrorMessage(getString(cU, cV), makeString(["mandatory ", toString(cU), ".", cV, " is not defined"], "")) | |
484 | + | ||
485 | + | ||
486 | + | let cW = 1 | |
487 | + | ||
488 | + | let cX = 2 | |
489 | + | ||
490 | + | let cY = 3 | |
491 | + | ||
492 | + | let cZ = 4 | |
493 | + | ||
494 | + | let da = 7 | |
495 | + | ||
496 | + | let db = 8 | |
497 | + | ||
498 | + | func dc () = "%s__restConfig" | |
499 | + | ||
500 | + | ||
501 | + | func dd () = "%s__restAddr" | |
502 | + | ||
503 | + | ||
504 | + | func de (df) = split_4C(cT(df, dc()), cK) | |
505 | + | ||
506 | + | ||
507 | + | func dg (dh,di) = valueOrErrorMessage(addressFromString(dh[di]), ("Rest cfg doesn't contain address at index " + toString(di))) | |
508 | + | ||
509 | + | ||
510 | + | let dj = addressFromStringValue(valueOrElse(getString(this, dd()), cG)) | |
511 | + | ||
512 | + | let dh = de(dj) | |
513 | + | ||
514 | + | let aq = dg(dh, cW) | |
515 | + | ||
516 | + | let dk = dg(dh, cX) | |
517 | + | ||
518 | + | let dl = dg(dh, cY) | |
519 | + | ||
520 | + | let dm = dg(dh, cZ) | |
521 | + | ||
522 | + | let dn = dg(dh, da) | |
523 | + | ||
524 | + | let do = dg(dh, db) | |
525 | + | ||
526 | + | let dp = 0 | |
527 | + | ||
528 | + | let dq = 1 | |
529 | + | ||
530 | + | let dr = 2 | |
531 | + | ||
532 | + | let ds = 3 | |
533 | + | ||
534 | + | let dt = "wlg_assetId" | |
535 | + | ||
536 | + | let du = valueOrErrorMessage(getBinary(dm, dt), "WLGOLD is not issued yet") | |
537 | + | ||
538 | + | let dv = "acresAssetId" | |
539 | + | ||
540 | + | let dw = valueOrErrorMessage(getBinary(do, dv), "ACRES is not issued yet") | |
541 | + | ||
542 | + | let dx = 2 | |
543 | + | ||
544 | + | func dy (cU) = ("finishBlockForAddr_" + cU) | |
545 | + | ||
546 | + | ||
547 | + | func dz () = "resTypesProportions" | |
548 | + | ||
549 | + | ||
550 | + | func dA (dB) = ("resTypesByContinent_" + dB) | |
551 | + | ||
552 | + | ||
553 | + | func dC (bC) = ("stakedLandsByOwner_" + bC) | |
554 | + | ||
555 | + | ||
556 | + | func dD (bC) = ("stakedPiecesByOwner_" + bC) | |
557 | + | ||
558 | + | ||
559 | + | func dE (dF) = { | |
560 | + | let cF = dF | |
561 | + | if ($isInstanceOf(cF, "String")) | |
558 | 562 | then { | |
559 | - | let | |
560 | - | | |
563 | + | let dG = cF | |
564 | + | dG | |
561 | 565 | } | |
562 | 566 | else throw("fail to cast into String") | |
563 | 567 | } | |
564 | 568 | ||
565 | 569 | ||
566 | - | func | |
567 | - | let | |
568 | - | if ($isInstanceOf( | |
570 | + | func dH (dF) = { | |
571 | + | let cF = dF | |
572 | + | if ($isInstanceOf(cF, "Int")) | |
569 | 573 | then { | |
570 | - | let dG = cD | |
574 | + | let dI = cF | |
575 | + | dI | |
576 | + | } | |
577 | + | else throw("fail to cast into Int") | |
578 | + | } | |
579 | + | ||
580 | + | ||
581 | + | func dJ (dF) = { | |
582 | + | let cF = dF | |
583 | + | if ($isInstanceOf(cF, "List[Any]")) | |
584 | + | then { | |
585 | + | let dK = cF | |
586 | + | dK | |
587 | + | } | |
588 | + | else throw("fail to cast into List[Any]") | |
589 | + | } | |
590 | + | ||
591 | + | ||
592 | + | func dL (dF) = { | |
593 | + | let cF = dF | |
594 | + | if ($isInstanceOf(cF, "Boolean")) | |
595 | + | then { | |
596 | + | let dG = cF | |
571 | 597 | dG | |
572 | 598 | } | |
573 | - | else throw("fail to cast into Int") | |
574 | - | } | |
575 | - | ||
576 | - | ||
577 | - | func dH (dD) = { | |
578 | - | let cD = dD | |
579 | - | if ($isInstanceOf(cD, "List[Any]")) | |
580 | - | then { | |
581 | - | let dI = cD | |
582 | - | dI | |
583 | - | } | |
584 | - | else throw("fail to cast into List[Any]") | |
585 | - | } | |
586 | - | ||
587 | - | ||
588 | - | func dJ (dD) = { | |
589 | - | let cD = dD | |
590 | - | if ($isInstanceOf(cD, "Boolean")) | |
591 | - | then { | |
592 | - | let dE = cD | |
593 | - | dE | |
594 | - | } | |
595 | 599 | else throw("fail to cast into Boolean") | |
596 | 600 | } | |
597 | 601 | ||
598 | 602 | ||
599 | - | func | |
600 | - | let | |
601 | - | if (("S" == | |
602 | - | then | |
603 | - | else if (("M" == | |
604 | - | then | |
605 | - | else if (("L" == | |
606 | - | then | |
607 | - | else if (("XL" == | |
608 | - | then | |
609 | - | else if (("XXL" == | |
610 | - | then | |
603 | + | func dM (dN) = { | |
604 | + | let cF = dN | |
605 | + | if (("S" == cF)) | |
606 | + | then cN | |
607 | + | else if (("M" == cF)) | |
608 | + | then cO | |
609 | + | else if (("L" == cF)) | |
610 | + | then cP | |
611 | + | else if (("XL" == cF)) | |
612 | + | then cQ | |
613 | + | else if (("XXL" == cF)) | |
614 | + | then cR | |
611 | 615 | else throw("Unknown land size") | |
612 | 616 | } | |
613 | 617 | ||
614 | 618 | ||
615 | - | func | |
616 | - | ||
617 | - | ||
618 | - | func | |
619 | - | ||
620 | - | ||
621 | - | func | |
622 | - | ||
623 | - | ||
624 | - | func | |
625 | - | let | |
626 | - | let | |
627 | - | let | |
628 | - | (((toString(( | |
629 | - | } | |
630 | - | ||
631 | - | ||
632 | - | func | |
633 | - | let | |
634 | - | (toInt( | |
635 | - | } | |
636 | - | ||
637 | - | ||
638 | - | let | |
639 | - | let | |
640 | - | if ((base58'2W' == | |
619 | + | func dO (dG) = isDefined(parseInt(dG)) | |
620 | + | ||
621 | + | ||
622 | + | func dP () = "contractsBlocked" | |
623 | + | ||
624 | + | ||
625 | + | func dQ (c) = ("lastTxIdByUser_" + c) | |
626 | + | ||
627 | + | ||
628 | + | func dR (dS,dT) = { | |
629 | + | let dU = pow(10, 0, dT, 0, 0, DOWN) | |
630 | + | let dV = toString((dS % dU)) | |
631 | + | let dW = drop(toString(dU), (1 + size(dV))) | |
632 | + | (((toString((dS / dU)) + ".") + dW) + dV) | |
633 | + | } | |
634 | + | ||
635 | + | ||
636 | + | func dX (dY,dZ,ea) = { | |
637 | + | let eb = sha256((dZ + ea)) | |
638 | + | (toInt(eb) % dY) | |
639 | + | } | |
640 | + | ||
641 | + | ||
642 | + | let ec = { | |
643 | + | let cF = cD | |
644 | + | if ((base58'2W' == cF)) | |
641 | 645 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
642 | - | else if ((base58'2T' == | |
646 | + | else if ((base58'2T' == cF)) | |
643 | 647 | then this | |
644 | 648 | else throw("Unknown chain") | |
645 | 649 | } | |
646 | 650 | ||
647 | - | let | |
648 | - | let | |
649 | - | if ((base58'2W' == | |
651 | + | let ed = { | |
652 | + | let cF = cD | |
653 | + | if ((base58'2W' == cF)) | |
650 | 654 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
651 | - | else if ((base58'2T' == | |
655 | + | else if ((base58'2T' == cF)) | |
652 | 656 | then this | |
653 | 657 | else throw("Unknown chain") | |
654 | 658 | } | |
655 | 659 | ||
656 | - | let | |
657 | - | let | |
658 | - | if ((base58'2W' == | |
659 | - | then if ( | |
660 | + | let ee = { | |
661 | + | let cF = cD | |
662 | + | if ((base58'2W' == cF)) | |
663 | + | then if (cz) | |
660 | 664 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
661 | 665 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
662 | - | else if ((base58'2T' == | |
666 | + | else if ((base58'2T' == cF)) | |
663 | 667 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
664 | 668 | else throw("Unknown chain") | |
665 | 669 | } | |
666 | 670 | ||
667 | - | let | |
668 | - | ||
669 | - | let | |
670 | - | ||
671 | - | let | |
672 | - | ||
673 | - | let | |
674 | - | ||
675 | - | let | |
676 | - | ||
677 | - | let | |
678 | - | let | |
679 | - | if ((base58'2W' == | |
671 | + | let ef = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
672 | + | ||
673 | + | let eg = 300000 | |
674 | + | ||
675 | + | let eh = 5000000 | |
676 | + | ||
677 | + | let ei = 50 | |
678 | + | ||
679 | + | let ej = 10000000 | |
680 | + | ||
681 | + | let ek = { | |
682 | + | let cF = cD | |
683 | + | if ((base58'2W' == cF)) | |
680 | 684 | then 252289527462 | |
681 | - | else if ((base58'2T' == | |
685 | + | else if ((base58'2T' == cF)) | |
682 | 686 | then 2522895274 | |
683 | 687 | else throw("Unknown chain") | |
684 | 688 | } | |
685 | 689 | ||
686 | - | let | |
687 | - | let | |
688 | - | if ((base58'2W' == | |
690 | + | let el = { | |
691 | + | let cF = cD | |
692 | + | if ((base58'2W' == cF)) | |
689 | 693 | then 250000000 | |
690 | - | else if ((base58'2T' == | |
694 | + | else if ((base58'2T' == cF)) | |
691 | 695 | then 250000000 | |
692 | 696 | else throw("Unknown chain") | |
693 | 697 | } | |
694 | 698 | ||
695 | - | let ek = 2500000000 | |
696 | - | ||
697 | - | let el = toBigInt(5) | |
698 | - | ||
699 | - | let em = toBigInt(20) | |
700 | - | ||
701 | - | let en = toBigInt((20 * 20)) | |
702 | - | ||
703 | - | let eo = toBigInt(((20 * 20) * 20)) | |
704 | - | ||
705 | - | let ep = toBigInt((((20 * 20) * 20) * 20)) | |
706 | - | ||
707 | - | let eq = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
708 | - | ||
709 | - | let er = 500 | |
710 | - | ||
711 | - | func es () = "nextLandNum" | |
712 | - | ||
713 | - | ||
714 | - | func et (eu) = ("lcn_" + eu) | |
715 | - | ||
716 | - | ||
717 | - | func ev (ew) = ("la_" + ew) | |
718 | - | ||
719 | - | ||
720 | - | func ex (bu,bB) = ((("ilao_" + bu) + "_") + bB) | |
721 | - | ||
722 | - | ||
723 | - | func ey (ew) = ("lo_" + ew) | |
724 | - | ||
725 | - | ||
726 | - | func ez (eu) = ("duckByCustomName_" + eu) | |
727 | - | ||
728 | - | ||
729 | - | func eA (eu) = ("accountByCustomName_" + eu) | |
730 | - | ||
731 | - | ||
732 | - | func eB () = "oldiesList" | |
733 | - | ||
734 | - | ||
735 | - | let eC = 0 | |
736 | - | ||
737 | - | let eD = 1 | |
738 | - | ||
739 | - | let eE = 2 | |
740 | - | ||
741 | - | let eF = 0 | |
742 | - | ||
743 | - | let eG = 5 | |
744 | - | ||
745 | - | let eH = 6 | |
746 | - | ||
747 | - | let eI = 7 | |
748 | - | ||
749 | - | func eJ (ew,dL) = ((aF + ew) + dL) | |
750 | - | ||
751 | - | ||
752 | - | func eK (eL,eM) = { | |
753 | - | let eN = if ((eL >= 0)) | |
754 | - | then (((eL + eM) - 1) / eM) | |
755 | - | else -((((-(eL) + eM) - 1) / eM)) | |
756 | - | (eN * cK) | |
757 | - | } | |
699 | + | let em = 100000 | |
700 | + | ||
701 | + | let en = 2500000000 | |
702 | + | ||
703 | + | let eo = toBigInt(5) | |
704 | + | ||
705 | + | let ep = toBigInt(20) | |
706 | + | ||
707 | + | let eq = toBigInt((20 * 20)) | |
708 | + | ||
709 | + | let er = toBigInt(((20 * 20) * 20)) | |
710 | + | ||
711 | + | let es = toBigInt((((20 * 20) * 20) * 20)) | |
712 | + | ||
713 | + | let et = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
714 | + | ||
715 | + | let eu = 500 | |
716 | + | ||
717 | + | func ev () = "nextLandNum" | |
718 | + | ||
719 | + | ||
720 | + | func ew (ex) = ("lcn_" + ex) | |
721 | + | ||
722 | + | ||
723 | + | func ey (ez) = ("la_" + ez) | |
724 | + | ||
725 | + | ||
726 | + | func eA (bv,bC) = ((("ilao_" + bv) + "_") + bC) | |
727 | + | ||
728 | + | ||
729 | + | func eB (ez) = ("lo_" + ez) | |
730 | + | ||
731 | + | ||
732 | + | func eC (ex) = ("duckByCustomName_" + ex) | |
733 | + | ||
734 | + | ||
735 | + | func eD (ex) = ("accountByCustomName_" + ex) | |
736 | + | ||
737 | + | ||
738 | + | func eE () = "oldiesList" | |
739 | + | ||
740 | + | ||
741 | + | func eF () = "nextRoboDuck" | |
742 | + | ||
743 | + | ||
744 | + | let eG = 0 | |
745 | + | ||
746 | + | let eH = 1 | |
747 | + | ||
748 | + | let eI = 2 | |
749 | + | ||
750 | + | let eJ = 0 | |
751 | + | ||
752 | + | let eK = 5 | |
753 | + | ||
754 | + | let eL = 6 | |
755 | + | ||
756 | + | let eM = 7 | |
757 | + | ||
758 | + | func eN (ez,dN) = ((aF + ez) + dN) | |
758 | 759 | ||
759 | 760 | ||
760 | 761 | func eO (eP,eQ) = { | |
761 | - | let eR = (((((eQ[0] + eQ[1]) + eQ[2]) + eQ[3]) + eQ[4]) + eQ[5]) | |
762 | - | if ((0 >= eR)) | |
762 | + | let eR = if ((eP >= 0)) | |
763 | + | then (((eP + eQ) - 1) / eQ) | |
764 | + | else -((((-(eP) + eQ) - 1) / eQ)) | |
765 | + | (eR * cM) | |
766 | + | } | |
767 | + | ||
768 | + | ||
769 | + | func eS (eT,eU) = { | |
770 | + | let eV = (((((eU[0] + eU[1]) + eU[2]) + eU[3]) + eU[4]) + eU[5]) | |
771 | + | if ((0 >= eV)) | |
763 | 772 | then throw("Zero weights sum") | |
764 | 773 | else { | |
765 | - | let | |
766 | - | func | |
767 | - | ||
768 | - | let | |
769 | - | let | |
770 | - | let | |
771 | - | func | |
772 | - | then | |
773 | - | else | |
774 | - | ||
775 | - | func | |
776 | - | then | |
774 | + | let eW = fraction(eT, cL, eV) | |
775 | + | func eX (eY,eZ) = (eY :+ fraction(eZ, eW, cL)) | |
776 | + | ||
777 | + | let fa = eU | |
778 | + | let fb = size(fa) | |
779 | + | let fc = nil | |
780 | + | func fd (fe,ff) = if ((ff >= fb)) | |
781 | + | then fe | |
782 | + | else eX(fe, fa[ff]) | |
783 | + | ||
784 | + | func fg (fe,ff) = if ((ff >= fb)) | |
785 | + | then fe | |
777 | 786 | else throw("List size exceeds 6") | |
778 | 787 | ||
779 | - | fc | |
780 | - | } | |
781 | - | } | |
782 | - | ||
783 | - | ||
784 | - | func | |
785 | - | let | |
786 | - | if ((size( | |
788 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
789 | + | } | |
790 | + | } | |
791 | + | ||
792 | + | ||
793 | + | func fh (eT) = { | |
794 | + | let fi = split(value(getString(dz())), "_") | |
795 | + | if ((size(fi) != aJ)) | |
787 | 796 | then throw("Wrong proportions data") | |
788 | 797 | else { | |
789 | - | let | |
790 | - | | |
791 | - | } | |
792 | - | } | |
793 | - | ||
794 | - | ||
795 | - | func | |
796 | - | let | |
797 | - | func | |
798 | - | let | |
799 | - | if ((0 > | |
800 | - | then throw(((((("Not enough material idx=" + toString( | |
801 | - | else ( | |
798 | + | let fj = [parseIntValue(fi[0]), parseIntValue(fi[1]), parseIntValue(fi[2]), parseIntValue(fi[3]), parseIntValue(fi[4]), parseIntValue(fi[5])] | |
799 | + | eS(eT, fj) | |
800 | + | } | |
801 | + | } | |
802 | + | ||
803 | + | ||
804 | + | func fk (fl,fm,fn) = { | |
805 | + | let fo = fh(fn) | |
806 | + | func fp (eY,di) = { | |
807 | + | let fq = (parseIntValue(fm[di]) - fo[di]) | |
808 | + | if ((0 > fq)) | |
809 | + | then throw(((((("Not enough material idx=" + toString(di)) + ", you have ") + fm[di]) + ", but need ") + toString(fo[di]))) | |
810 | + | else (eY :+ toString(fq)) | |
802 | 811 | } | |
803 | 812 | ||
804 | - | if ( | |
813 | + | if (fl) | |
805 | 814 | then { | |
806 | - | let | |
807 | - | let | |
808 | - | let | |
809 | - | func | |
810 | - | then | |
811 | - | else | |
812 | - | ||
813 | - | func | |
814 | - | then | |
815 | + | let fa = cS | |
816 | + | let fb = size(fa) | |
817 | + | let fc = nil | |
818 | + | func fd (fe,ff) = if ((ff >= fb)) | |
819 | + | then fe | |
820 | + | else fp(fe, fa[ff]) | |
821 | + | ||
822 | + | func fg (fe,ff) = if ((ff >= fb)) | |
823 | + | then fe | |
815 | 824 | else throw("List size exceeds 6") | |
816 | 825 | ||
817 | - | fc | |
818 | - | } | |
819 | - | else | |
820 | - | } | |
821 | - | ||
822 | - | ||
823 | - | func | |
824 | - | then $Tuple2( | |
826 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
827 | + | } | |
828 | + | else fm | |
829 | + | } | |
830 | + | ||
831 | + | ||
832 | + | func fr (fs,ft) = if ((ft == "")) | |
833 | + | then $Tuple2(fs, false) | |
825 | 834 | else { | |
826 | - | func | |
827 | - | let | |
828 | - | if ((size( | |
835 | + | func fu (eY,fv) = { | |
836 | + | let fw = split(fv, ",") | |
837 | + | if ((size(fw) != 2)) | |
829 | 838 | then throw("Incorrect format, should be index,amount") | |
830 | 839 | else { | |
831 | - | let | |
832 | - | if (if ((0 > | |
840 | + | let di = parseIntValue(fw[0]) | |
841 | + | if (if ((0 > di)) | |
833 | 842 | then true | |
834 | - | else ( | |
843 | + | else (di >= size(aY))) | |
835 | 844 | then throw("Unknown product idx") | |
836 | 845 | else { | |
837 | - | let | |
838 | - | let | |
839 | - | if ((size( | |
840 | - | then throw((("You don't have " + | |
846 | + | let fx = parseIntValue(fw[1]) | |
847 | + | let fy = split(eY._1, (fw[0] + ":")) | |
848 | + | if ((size(fy) != 2)) | |
849 | + | then throw((("You don't have " + aU[di]) + " equipped")) | |
841 | 850 | else { | |
842 | - | let | |
843 | - | let | |
851 | + | let fz = fy[1] | |
852 | + | let fA = if (dO(take(drop(fz, 1), 1))) | |
844 | 853 | then 2 | |
845 | 854 | else 1 | |
846 | - | let | |
847 | - | let | |
848 | - | let | |
849 | - | then ( | |
850 | - | else throw(((((("You equipped " + toString( | |
851 | - | $Tuple2((((( | |
855 | + | let fB = parseIntValue(take(fz, fA)) | |
856 | + | let fC = drop(fz, fA) | |
857 | + | let fD = if ((fB >= fx)) | |
858 | + | then (fB - fx) | |
859 | + | else throw(((((("You equipped " + toString(fB)) + " of ") + aU[di]) + ", but tried to use ") + toString(fx))) | |
860 | + | $Tuple2(((((fy[0] + fw[0]) + ":") + toString(fD)) + fC), if (eY._2) | |
852 | 861 | then true | |
853 | - | else if (if (( | |
854 | - | then (8 >= | |
862 | + | else if (if ((di >= 6)) | |
863 | + | then (8 >= di) | |
855 | 864 | else false) | |
856 | - | then ( | |
865 | + | then (fD == 0) | |
857 | 866 | else false) | |
858 | 867 | } | |
859 | 868 | } | |
860 | 869 | } | |
861 | 870 | } | |
862 | 871 | ||
863 | - | let | |
864 | - | let | |
865 | - | let | |
866 | - | func | |
867 | - | then | |
868 | - | else | |
869 | - | ||
870 | - | func | |
871 | - | then | |
872 | + | let fa = split(ft, "_") | |
873 | + | let fb = size(fa) | |
874 | + | let fc = $Tuple2(fs, false) | |
875 | + | func fd (fe,ff) = if ((ff >= fb)) | |
876 | + | then fe | |
877 | + | else fu(fe, fa[ff]) | |
878 | + | ||
879 | + | func fg (fe,ff) = if ((ff >= fb)) | |
880 | + | then fe | |
872 | 881 | else throw("List size exceeds 10") | |
873 | 882 | ||
874 | - | fc | |
883 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
875 | 884 | } | |
876 | 885 | ||
877 | 886 | ||
878 | - | func | |
879 | - | let | |
887 | + | func fE (fF) = { | |
888 | + | let fG = if ((fF == "")) | |
880 | 889 | then nil | |
881 | - | else split_4C( | |
882 | - | func | |
883 | - | let | |
884 | - | let | |
885 | - | then parseIntValue( | |
890 | + | else split_4C(fF, "_") | |
891 | + | func fH (eY,cu) = { | |
892 | + | let fI = (size(eY) / 8) | |
893 | + | let fB = if ((size(fG) > fI)) | |
894 | + | then parseIntValue(fG[fI]) | |
886 | 895 | else 0 | |
887 | - | ( | |
896 | + | (eY + toBytes(fB)) | |
888 | 897 | } | |
889 | 898 | ||
890 | - | let | |
891 | - | let | |
892 | - | let | |
893 | - | func | |
894 | - | then | |
895 | - | else | |
896 | - | ||
897 | - | func | |
898 | - | then | |
899 | + | let fa = aY | |
900 | + | let fb = size(fa) | |
901 | + | let fc = base58'' | |
902 | + | func fd (fe,ff) = if ((ff >= fb)) | |
903 | + | then fe | |
904 | + | else fH(fe, fa[ff]) | |
905 | + | ||
906 | + | func fg (fe,ff) = if ((ff >= fb)) | |
907 | + | then fe | |
899 | 908 | else throw("List size exceeds 50") | |
900 | 909 | ||
901 | - | fc | |
902 | - | } | |
903 | - | ||
904 | - | ||
905 | - | func | |
906 | - | func | |
907 | - | let | |
908 | - | let | |
909 | - | ( | |
910 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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) | |
911 | + | } | |
912 | + | ||
913 | + | ||
914 | + | func fJ (fK) = { | |
915 | + | func fL (eY,cu) = { | |
916 | + | let fI = size(eY) | |
917 | + | let fM = take(drop(fK, (8 * fI)), 8) | |
918 | + | (eY :+ toString(toInt(fM))) | |
910 | 919 | } | |
911 | 920 | ||
912 | 921 | makeString_2C({ | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | func | |
917 | - | then | |
918 | - | else | |
919 | - | ||
920 | - | func | |
921 | - | then | |
922 | + | let fa = aY | |
923 | + | let fb = size(fa) | |
924 | + | let fc = nil | |
925 | + | func fd (fe,ff) = if ((ff >= fb)) | |
926 | + | then fe | |
927 | + | else fL(fe, fa[ff]) | |
928 | + | ||
929 | + | func fg (fe,ff) = if ((ff >= fb)) | |
930 | + | then fe | |
922 | 931 | else throw("List size exceeds 50") | |
923 | 932 | ||
924 | - | fc | |
933 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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) | |
925 | 934 | }, "_") | |
926 | 935 | } | |
927 | 936 | ||
928 | 937 | ||
929 | - | func | |
930 | - | func | |
931 | - | let | |
932 | - | then | |
938 | + | func fN (fO,fP) = { | |
939 | + | func fQ (eY,fI) = { | |
940 | + | let fR = if ((size(fO) > (7 + fI))) | |
941 | + | then fO[(7 + fI)] | |
933 | 942 | else 0 | |
934 | - | if ((parseIntValue( | |
935 | - | then throw(("Requirement not satisfied: " + k[ | |
943 | + | if ((parseIntValue(fP[fI]) > (fO[fI] + fR))) | |
944 | + | then throw(("Requirement not satisfied: " + k[fI])) | |
936 | 945 | else true | |
937 | 946 | } | |
938 | 947 | ||
939 | - | let | |
940 | - | let | |
941 | - | let | |
942 | - | func | |
943 | - | then | |
944 | - | else | |
945 | - | ||
946 | - | func | |
947 | - | then | |
948 | + | let fa = [0, 1, 2, 3, 4, 5, 6] | |
949 | + | let fb = size(fa) | |
950 | + | let fc = false | |
951 | + | func fd (fe,ff) = if ((ff >= fb)) | |
952 | + | then fe | |
953 | + | else fQ(fe, fa[ff]) | |
954 | + | ||
955 | + | func fg (fe,ff) = if ((ff >= fb)) | |
956 | + | then fe | |
948 | 957 | else throw("List size exceeds 7") | |
949 | 958 | ||
950 | - | fc | |
951 | - | } | |
952 | - | ||
953 | - | ||
954 | - | func | |
955 | - | let | |
956 | - | if ((size( | |
959 | + | fg(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7) | |
960 | + | } | |
961 | + | ||
962 | + | ||
963 | + | func fS (fT,fG,fU,fO,fV,fW) = { | |
964 | + | let fw = split(fT, ":") | |
965 | + | if ((size(fw) != 2)) | |
957 | 966 | then throw("Incorrect format, should be index:amount") | |
958 | - | else if (if (!( | |
959 | - | then (size( | |
967 | + | else if (if (!(fU)) | |
968 | + | then (size(fw[0]) != 2) | |
960 | 969 | else false) | |
961 | 970 | then throw("Product idx should be 2 digits, zero padded") | |
962 | 971 | else { | |
963 | - | let | |
964 | - | let | |
965 | - | if (!(containsElement( | |
966 | - | then throw((("Product '" + | |
967 | - | else if ((0 > | |
972 | + | let fX = parseIntValue(fw[0]) | |
973 | + | let fY = parseIntValue(fw[1]) | |
974 | + | if (!(containsElement(aX, fX))) | |
975 | + | then throw((("Product '" + aU[fX]) + "' cannot be used for land defense")) | |
976 | + | else if ((0 > fY)) | |
968 | 977 | then throw("Count can't be negative") | |
969 | - | else if (( | |
970 | - | then throw(((("Can't put more than " + toString(u)) + " of ") + | |
971 | - | else if (( | |
972 | - | then $Tuple3( | |
978 | + | else if ((fY > u)) | |
979 | + | then throw(((("Can't put more than " + toString(u)) + " of ") + aU[fX])) | |
980 | + | else if ((fY == 0)) | |
981 | + | then $Tuple3(fG, fV, fW) | |
973 | 982 | else { | |
974 | - | let | |
975 | - | let | |
976 | - | let | |
977 | - | let | |
978 | - | if (if (!( | |
979 | - | then ( | |
983 | + | let fZ = take(fG, (8 * fX)) | |
984 | + | let fB = toInt(take(drop(fG, (8 * fX)), 8)) | |
985 | + | let fC = drop(fG, (8 * (fX + 1))) | |
986 | + | let cu = split(aY[fX], "_") | |
987 | + | if (if (!(fU)) | |
988 | + | then (fY > fB) | |
980 | 989 | else false) | |
981 | - | then throw(((((("You have " + toString( | |
990 | + | then throw(((((("You have " + toString(fB)) + " of ") + aU[fX]) + ", but tried to use ") + toString(fY))) | |
982 | 991 | else { | |
983 | - | let | |
984 | - | then | |
992 | + | let fD = if (if (!(fU)) | |
993 | + | then fN(fO, split(cu[bb], ",")) | |
985 | 994 | else false) | |
986 | - | then ( | |
987 | - | else ( | |
988 | - | let | |
989 | - | $Tuple3((( | |
995 | + | then (fB - fY) | |
996 | + | else (fB + fY) | |
997 | + | let ga = (eO(fD, bd) - eO(fB, bd)) | |
998 | + | $Tuple3(((fZ + toBytes(fD)) + fC), (fV + ga), (fW - ga)) | |
990 | 999 | } | |
991 | 1000 | } | |
992 | 1001 | } | |
993 | 1002 | } | |
994 | 1003 | ||
995 | 1004 | ||
996 | - | func | |
997 | - | let | |
998 | - | if ((size( | |
1005 | + | func gb (fT,fG,fU,gc,gd,ge,fO) = { | |
1006 | + | let fw = split(fT, ":") | |
1007 | + | if ((size(fw) != 2)) | |
999 | 1008 | then throw("Incorrect format, should be index:amount") | |
1000 | - | else if (if (!( | |
1001 | - | then (size( | |
1009 | + | else if (if (!(fU)) | |
1010 | + | then (size(fw[0]) != 2) | |
1002 | 1011 | else false) | |
1003 | 1012 | then throw("Product idx should be 2 digits, zero padded") | |
1004 | 1013 | else { | |
1005 | - | let | |
1006 | - | let | |
1007 | - | if (if ((0 > | |
1014 | + | let fX = parseIntValue(fw[0]) | |
1015 | + | let fY = parseIntValue(fw[1]) | |
1016 | + | if (if ((0 > fX)) | |
1008 | 1017 | then true | |
1009 | - | else ( | |
1018 | + | else (fX >= size(aY))) | |
1010 | 1019 | then throw("Unknown product idx") | |
1011 | - | else if ((0 > | |
1020 | + | else if ((0 > fY)) | |
1012 | 1021 | then throw("Count can't be negative") | |
1013 | - | else if (( | |
1014 | - | then throw(((("Can't put more than " + toString(u)) + " of ") + | |
1015 | - | else if (( | |
1016 | - | then $Tuple2( | |
1022 | + | else if ((fY > u)) | |
1023 | + | then throw(((("Can't put more than " + toString(u)) + " of ") + aU[fX])) | |
1024 | + | else if ((fY == 0)) | |
1025 | + | then $Tuple2(fG, false) | |
1017 | 1026 | else { | |
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | if (if (!( | |
1023 | - | then ( | |
1027 | + | let fZ = take(fG, (8 * fX)) | |
1028 | + | let fB = toInt(take(drop(fG, (8 * fX)), 8)) | |
1029 | + | let fC = drop(fG, (8 * (fX + 1))) | |
1030 | + | let cu = split(aY[fX], "_") | |
1031 | + | if (if (!(fU)) | |
1032 | + | then (fY > fB) | |
1024 | 1033 | else false) | |
1025 | - | then throw(((((("You have " + toString( | |
1034 | + | then throw(((((("You have " + toString(fB)) + " of ") + aU[fX]) + ", but tried to use ") + toString(fY))) | |
1026 | 1035 | else { | |
1027 | - | let | |
1028 | - | then | |
1036 | + | let gf = if (if (!(fU)) | |
1037 | + | then fN(fO, split(cu[bb], ",")) | |
1029 | 1038 | else false) | |
1030 | 1039 | then { | |
1031 | - | let | |
1032 | - | if (( | |
1040 | + | let gg = cu[bc] | |
1041 | + | if ((gg == "")) | |
1033 | 1042 | then throw("Item cannot be equipped") | |
1034 | 1043 | else { | |
1035 | - | let | |
1036 | - | let | |
1037 | - | if (( | |
1044 | + | let gh = parseIntValue(gg) | |
1045 | + | let gi = (gh / 100) | |
1046 | + | if ((gc != gi)) | |
1038 | 1047 | then throw("Segment incompatible") | |
1039 | 1048 | else { | |
1040 | - | let | |
1041 | - | if (( | |
1049 | + | let gj = ((gh % 100) / 10) | |
1050 | + | if ((gd != gj)) | |
1042 | 1051 | then throw("Slot incompatible") | |
1043 | 1052 | else { | |
1044 | - | let | |
1045 | - | if (if (( | |
1046 | - | then ( | |
1053 | + | let gk = (gh % 10) | |
1054 | + | if (if ((ge != 0)) | |
1055 | + | then (gk > 1) | |
1047 | 1056 | else false) | |
1048 | 1057 | then throw("Big items should occupy slot 0") | |
1049 | - | else ( | |
1058 | + | else (gk > 1) | |
1050 | 1059 | } | |
1051 | 1060 | } | |
1052 | 1061 | } | |
1053 | 1062 | } | |
1054 | 1063 | else false | |
1055 | - | $Tuple2((( | |
1056 | - | then | |
1057 | - | else -( | |
1064 | + | $Tuple2(((fZ + toBytes((fB + (if (fU) | |
1065 | + | then fY | |
1066 | + | else -(fY))))) + fC), gf) | |
1058 | 1067 | } | |
1059 | 1068 | } | |
1060 | 1069 | } | |
1061 | 1070 | } | |
1062 | 1071 | ||
1063 | 1072 | ||
1064 | - | func | |
1073 | + | func gl (gm,gn,fU,gc,gd,go) = if ((gm != "")) | |
1065 | 1074 | then { | |
1066 | - | let | |
1067 | - | if ((size( | |
1075 | + | let gp = split(gm, ",") | |
1076 | + | if ((size(gp) > t)) | |
1068 | 1077 | then throw("Wrong slots format") | |
1069 | 1078 | else { | |
1070 | - | let | |
1071 | - | let | |
1072 | - | then | |
1079 | + | let gq = gp[0] | |
1080 | + | let gr = if ((size(gp) > 1)) | |
1081 | + | then gp[1] | |
1073 | 1082 | else "" | |
1074 | - | if (if (( | |
1075 | - | then ( | |
1083 | + | if (if ((gq == "")) | |
1084 | + | then (gr == "") | |
1076 | 1085 | else false) | |
1077 | - | then | |
1086 | + | then gn | |
1078 | 1087 | else { | |
1079 | - | let | |
1080 | - | then | |
1081 | - | else $Tuple2( | |
1082 | - | if (( | |
1083 | - | then if ( | |
1088 | + | let gs = if ((gq != "")) | |
1089 | + | then gb(gq, gn, fU, gc, gd, 0, go) | |
1090 | + | else $Tuple2(gn, false) | |
1091 | + | if ((gr != "")) | |
1092 | + | then if (gs._2) | |
1084 | 1093 | then throw("Big item already occupies slot") | |
1085 | - | else | |
1086 | - | else | |
1094 | + | else gb(gr, gs._1, fU, gc, gd, 1, go)._1 | |
1095 | + | else gs._1 | |
1087 | 1096 | } | |
1088 | 1097 | } | |
1089 | 1098 | } | |
1090 | - | else | |
1091 | - | ||
1092 | - | ||
1093 | - | func | |
1094 | - | func | |
1095 | - | let | |
1096 | - | let | |
1097 | - | if ((size( | |
1099 | + | else gn | |
1100 | + | ||
1101 | + | ||
1102 | + | func gt (gu,gv,fU,go) = { | |
1103 | + | func gc (eY,gw) = { | |
1104 | + | let fI = eY._1 | |
1105 | + | let gd = split(gw, ";") | |
1106 | + | if ((size(gd) != s)) | |
1098 | 1107 | then throw("Wrong segment format") | |
1099 | 1108 | else { | |
1100 | - | let | |
1101 | - | let | |
1102 | - | if (if (( | |
1103 | - | then ( | |
1109 | + | let gx = gd[0] | |
1110 | + | let gy = gd[1] | |
1111 | + | if (if ((gx == "")) | |
1112 | + | then (gy == "") | |
1104 | 1113 | else false) | |
1105 | - | then $Tuple2(( | |
1114 | + | then $Tuple2((fI + 1), eY._2) | |
1106 | 1115 | else { | |
1107 | - | let | |
1108 | - | $Tuple2(( | |
1116 | + | let gz = gl(gx, eY._2, fU, fI, 0, go) | |
1117 | + | $Tuple2((fI + 1), gl(gy, gz, fU, fI, 1, go)) | |
1109 | 1118 | } | |
1110 | 1119 | } | |
1111 | 1120 | } | |
1112 | 1121 | ||
1113 | - | ( let | |
1114 | - | let | |
1115 | - | let | |
1116 | - | func | |
1117 | - | then | |
1118 | - | else | |
1119 | - | ||
1120 | - | func | |
1121 | - | then | |
1122 | + | ( let fa = gu | |
1123 | + | let fb = size(fa) | |
1124 | + | let fc = $Tuple2(0, gv) | |
1125 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1126 | + | then fe | |
1127 | + | else gc(fe, fa[ff]) | |
1128 | + | ||
1129 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1130 | + | then fe | |
1122 | 1131 | else throw("List size exceeds 6") | |
1123 | 1132 | ||
1124 | - | fc | |
1125 | - | } | |
1126 | - | ||
1127 | - | ||
1128 | - | func | |
1133 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6))._2 | |
1134 | + | } | |
1135 | + | ||
1136 | + | ||
1137 | + | func gA (gu,gv,fV,fW,fU,fO) = if ((3 > size(gu))) | |
1129 | 1138 | then throw("At least duck, mines and traps parts are required") | |
1130 | 1139 | else { | |
1131 | - | func | |
1132 | - | let | |
1133 | - | if (( | |
1134 | - | then $Tuple4(( | |
1140 | + | func gc (eY,gw) = { | |
1141 | + | let fI = eY._1 | |
1142 | + | if ((fI == 0)) | |
1143 | + | then $Tuple4((fI + 1), eY._2, eY._3, eY._4) | |
1135 | 1144 | else { | |
1136 | - | let | |
1137 | - | $Tuple4(( | |
1145 | + | let gB = fS(gw, eY._2, fU, fO, eY._3, eY._4) | |
1146 | + | $Tuple4((fI + 1), gB._1, gB._2, gB._3) | |
1138 | 1147 | } | |
1139 | 1148 | } | |
1140 | 1149 | ||
1141 | - | let | |
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | func | |
1146 | - | then | |
1147 | - | else | |
1148 | - | ||
1149 | - | func | |
1150 | - | then | |
1150 | + | let gC = { | |
1151 | + | let fa = gu | |
1152 | + | let fb = size(fa) | |
1153 | + | let fc = $Tuple4(0, gv, fV, fW) | |
1154 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1155 | + | then fe | |
1156 | + | else gc(fe, fa[ff]) | |
1157 | + | ||
1158 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1159 | + | then fe | |
1151 | 1160 | else throw("List size exceeds 10") | |
1152 | 1161 | ||
1153 | - | fc | |
1154 | - | } | |
1155 | - | $Tuple3( | |
1162 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1163 | + | } | |
1164 | + | $Tuple3(gC._2, gC._3, gC._4) | |
1156 | 1165 | } | |
1157 | 1166 | ||
1158 | 1167 | ||
1159 | - | func | |
1160 | - | let | |
1161 | - | let | |
1162 | - | let | |
1163 | - | let | |
1164 | - | let ar = if (( | |
1168 | + | func gD (B) = { | |
1169 | + | let gE = G(B) | |
1170 | + | let gF = split(valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1171 | + | let gG = gt(gF, ef, true, nil) | |
1172 | + | let gH = split(gF[q], ";")[1] | |
1173 | + | let ar = if ((gH == "")) | |
1165 | 1174 | then 0 | |
1166 | 1175 | else { | |
1167 | - | let | |
1168 | - | if (( | |
1176 | + | let gI = split(gH, ",")[0] | |
1177 | + | if ((gI == "")) | |
1169 | 1178 | then 0 | |
1170 | 1179 | else { | |
1171 | - | let | |
1172 | - | let | |
1173 | - | let | |
1174 | - | if (if (if (if (if (( | |
1180 | + | let fT = split(gI, ":") | |
1181 | + | let di = fT[0] | |
1182 | + | let gJ = fT[1] | |
1183 | + | if (if (if (if (if ((di == "06")) | |
1175 | 1184 | then true | |
1176 | - | else ( | |
1185 | + | else (di == "07")) | |
1177 | 1186 | then true | |
1178 | - | else ( | |
1179 | - | then ( | |
1187 | + | else (di == "08")) | |
1188 | + | then (gJ != "") | |
1180 | 1189 | else false) | |
1181 | - | then (parseIntValue( | |
1190 | + | then (parseIntValue(gJ) > 0) | |
1182 | 1191 | else false) | |
1183 | - | then parseIntValue(split( | |
1192 | + | then parseIntValue(split(aY[parseIntValue(di)], "_")[ba]) | |
1184 | 1193 | else 0 | |
1185 | 1194 | } | |
1186 | 1195 | } | |
1187 | - | let | |
1188 | - | let | |
1189 | - | ( | |
1190 | - | } | |
1191 | - | ||
1192 | - | ||
1193 | - | func | |
1196 | + | let go = ap(this, B, ar, true) | |
1197 | + | let gK = gt(gF, gG, false, go) | |
1198 | + | (gK == gK) | |
1199 | + | } | |
1200 | + | ||
1201 | + | ||
1202 | + | func gL (gM,gN,gO,gP) = if ((size(gM) != aJ)) | |
1194 | 1203 | then throw("Wrong proportions data") | |
1195 | 1204 | else { | |
1196 | - | func | |
1197 | - | let | |
1198 | - | if ((0 > | |
1199 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1200 | - | else ( | |
1201 | - | } | |
1202 | - | ||
1203 | - | let | |
1204 | - | let | |
1205 | - | let | |
1206 | - | func | |
1207 | - | then | |
1208 | - | else | |
1209 | - | ||
1210 | - | func | |
1211 | - | then | |
1205 | + | func gQ (eY,gR) = { | |
1206 | + | let fq = (parseIntValue(gM[gR]) + ((gP * gN[gR]) * gO)) | |
1207 | + | if ((0 > fq)) | |
1208 | + | then throw(((((((("Panic! Pieces of type=" + toString(gR)) + ", sign=") + toString(gP)) + ", terrainCounts[i]=") + toString(gN[gR])) + ", landSizeIndex=") + toString(gO))) | |
1209 | + | else (eY :+ toString(fq)) | |
1210 | + | } | |
1211 | + | ||
1212 | + | let fa = cS | |
1213 | + | let fb = size(fa) | |
1214 | + | let fc = nil | |
1215 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1216 | + | then fe | |
1217 | + | else gQ(fe, fa[ff]) | |
1218 | + | ||
1219 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1220 | + | then fe | |
1212 | 1221 | else throw("List size exceeds 6") | |
1213 | 1222 | ||
1214 | - | fc | |
1223 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1215 | 1224 | } | |
1216 | 1225 | ||
1217 | 1226 | ||
1218 | - | func | |
1219 | - | let | |
1220 | - | makeString( | |
1221 | - | } | |
1222 | - | ||
1223 | - | ||
1224 | - | func | |
1225 | - | ||
1226 | - | ||
1227 | - | func | |
1228 | - | func | |
1229 | - | let | |
1230 | - | ( | |
1227 | + | func gS (gN,gO,gP) = { | |
1228 | + | let gM = split(valueOrElse(getString(dz()), "0_0_0_0_0_0"), "_") | |
1229 | + | makeString(gL(gM, gN, gO, gP), "_") | |
1230 | + | } | |
1231 | + | ||
1232 | + | ||
1233 | + | func gT (gU) = [(size(split(gU, "A")) - 1), (size(split(gU, "B")) - 1), (size(split(gU, "C")) - 1), (size(split(gU, "D")) - 1), (size(split(gU, "E")) - 1), (size(split(gU, "F")) - 1)] | |
1234 | + | ||
1235 | + | ||
1236 | + | func gV (gW,gN,gX,gO,gY) = { | |
1237 | + | func gZ (eY,gR) = { | |
1238 | + | let ha = ((fraction(gX, gY, a) * gN[gR]) * gO) | |
1239 | + | (eY :+ toString((parseIntValue(gW[gR]) + ha))) | |
1231 | 1240 | } | |
1232 | 1241 | ||
1233 | - | let | |
1234 | - | let | |
1235 | - | let | |
1236 | - | let | |
1237 | - | func | |
1238 | - | then | |
1239 | - | else | |
1240 | - | ||
1241 | - | func | |
1242 | - | then | |
1242 | + | let fj = { | |
1243 | + | let fa = cS | |
1244 | + | let fb = size(fa) | |
1245 | + | let fc = nil | |
1246 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1247 | + | then fe | |
1248 | + | else gZ(fe, fa[ff]) | |
1249 | + | ||
1250 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1251 | + | then fe | |
1243 | 1252 | else throw("List size exceeds 6") | |
1244 | 1253 | ||
1245 | - | fc | |
1254 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1246 | 1255 | } | |
1247 | - | makeString( | |
1248 | - | } | |
1249 | - | ||
1250 | - | ||
1251 | - | func | |
1252 | - | func | |
1253 | - | let | |
1254 | - | $Tuple2(( | |
1256 | + | makeString(fj, "_") | |
1257 | + | } | |
1258 | + | ||
1259 | + | ||
1260 | + | func hb (gN,gX,gO,gY) = { | |
1261 | + | func gZ (eY,gR) = { | |
1262 | + | let ha = ((fraction(gX, gY, a) * gN[gR]) * gO) | |
1263 | + | $Tuple2((eY._1 :+ ha), (eY._2 + ha)) | |
1255 | 1264 | } | |
1256 | 1265 | ||
1257 | - | let | |
1258 | - | let | |
1259 | - | let | |
1260 | - | func | |
1261 | - | then | |
1262 | - | else | |
1263 | - | ||
1264 | - | func | |
1265 | - | then | |
1266 | + | let fa = cS | |
1267 | + | let fb = size(fa) | |
1268 | + | let fc = $Tuple2(nil, 0) | |
1269 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1270 | + | then fe | |
1271 | + | else gZ(fe, fa[ff]) | |
1272 | + | ||
1273 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1274 | + | then fe | |
1266 | 1275 | else throw("List size exceeds 6") | |
1267 | 1276 | ||
1268 | - | fc | |
1269 | - | } | |
1270 | - | ||
1271 | - | ||
1272 | - | func | |
1273 | - | let | |
1274 | - | let | |
1275 | - | if (( | |
1276 | - | then $Tuple2(makeString( | |
1277 | - | else if (( | |
1277 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1278 | + | } | |
1279 | + | ||
1280 | + | ||
1281 | + | func hc (hd,he,hf,hg) = { | |
1282 | + | let hh = hf._1 | |
1283 | + | let hi = hf._2 | |
1284 | + | if ((hi == 0)) | |
1285 | + | then $Tuple2(makeString(hd, "_"), makeString(he, "_")) | |
1286 | + | else if ((hg >= hi)) | |
1278 | 1287 | then { | |
1279 | - | func | |
1280 | - | ||
1281 | - | let | |
1282 | - | let | |
1283 | - | let | |
1284 | - | let | |
1285 | - | func | |
1286 | - | then | |
1287 | - | else | |
1288 | - | ||
1289 | - | func | |
1290 | - | then | |
1288 | + | func hj (eY,gR) = (eY :+ toString((parseIntValue(hd[gR]) + hh[gR]))) | |
1289 | + | ||
1290 | + | let fj = { | |
1291 | + | let fa = cS | |
1292 | + | let fb = size(fa) | |
1293 | + | let fc = nil | |
1294 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1295 | + | then fe | |
1296 | + | else hj(fe, fa[ff]) | |
1297 | + | ||
1298 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1299 | + | then fe | |
1291 | 1300 | else throw("List size exceeds 6") | |
1292 | 1301 | ||
1293 | - | fc | |
1302 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1294 | 1303 | } | |
1295 | - | $Tuple2(makeString( | |
1304 | + | $Tuple2(makeString(fj, "_"), makeString(he, "_")) | |
1296 | 1305 | } | |
1297 | 1306 | else { | |
1298 | - | func | |
1299 | - | let | |
1300 | - | $Tuple2(( | |
1307 | + | func hk (eY,gR) = { | |
1308 | + | let hl = fraction(hh[gR], hg, hi) | |
1309 | + | $Tuple2((eY._1 :+ toString((parseIntValue(hd[gR]) + hl))), (eY._2 :+ toString(((parseIntValue(he[gR]) + hh[gR]) - hl)))) | |
1301 | 1310 | } | |
1302 | 1311 | ||
1303 | - | let | |
1304 | - | let | |
1305 | - | let | |
1306 | - | let | |
1307 | - | func | |
1308 | - | then | |
1309 | - | else | |
1310 | - | ||
1311 | - | func | |
1312 | - | then | |
1312 | + | let fj = { | |
1313 | + | let fa = cS | |
1314 | + | let fb = size(fa) | |
1315 | + | let fc = $Tuple2(nil, nil) | |
1316 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1317 | + | then fe | |
1318 | + | else hk(fe, fa[ff]) | |
1319 | + | ||
1320 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1321 | + | then fe | |
1313 | 1322 | else throw("List size exceeds 6") | |
1314 | 1323 | ||
1315 | - | fc | |
1324 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1316 | 1325 | } | |
1317 | - | $Tuple2(makeString( | |
1326 | + | $Tuple2(makeString(fj._1, "_"), makeString(fj._2, "_")) | |
1318 | 1327 | } | |
1319 | 1328 | } | |
1320 | 1329 | ||
1321 | 1330 | ||
1322 | - | func | |
1323 | - | then | |
1324 | - | else -( | |
1325 | - | ||
1326 | - | ||
1327 | - | let | |
1328 | - | ||
1329 | - | func | |
1330 | - | let | |
1331 | - | let | |
1331 | + | func hm (hn) = if ((hn >= toBigInt(0))) | |
1332 | + | then hn | |
1333 | + | else -(hn) | |
1334 | + | ||
1335 | + | ||
1336 | + | let ho = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
1337 | + | ||
1338 | + | func hp (dI,hq) = { | |
1339 | + | let hr = toInt((dI % ep)) | |
1340 | + | let hs = if ((hq[0] > hr)) | |
1332 | 1341 | then "A" | |
1333 | - | else if (( | |
1342 | + | else if ((hq[1] > hr)) | |
1334 | 1343 | then "B" | |
1335 | - | else if (( | |
1344 | + | else if ((hq[2] > hr)) | |
1336 | 1345 | then "C" | |
1337 | - | else if (( | |
1346 | + | else if ((hq[3] > hr)) | |
1338 | 1347 | then "D" | |
1339 | - | else if (( | |
1348 | + | else if ((hq[4] > hr)) | |
1340 | 1349 | then "E" | |
1341 | 1350 | else "F" | |
1342 | - | | |
1343 | - | } | |
1344 | - | ||
1345 | - | ||
1346 | - | func | |
1347 | - | let | |
1348 | - | func | |
1349 | - | ||
1350 | - | let | |
1351 | - | let | |
1352 | - | let | |
1353 | - | let | |
1354 | - | func | |
1355 | - | then | |
1356 | - | else | |
1357 | - | ||
1358 | - | func | |
1359 | - | then | |
1351 | + | hs | |
1352 | + | } | |
1353 | + | ||
1354 | + | ||
1355 | + | func ht (hu,hv) = { | |
1356 | + | let hw = ho[hv] | |
1357 | + | func hx (eY,eZ) = $Tuple2((((((eY._1 + hp(eY._2, hw)) + hp((eY._2 / ep), hw)) + hp((eY._2 / eq), hw)) + hp((eY._2 / er), hw)) + hp((eY._2 / es), hw)), (eY._2 / et)) | |
1358 | + | ||
1359 | + | let gC = { | |
1360 | + | let fa = [1, 2, 3, 4, 5] | |
1361 | + | let fb = size(fa) | |
1362 | + | let fc = $Tuple2("", (hu / eo)) | |
1363 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1364 | + | then fe | |
1365 | + | else hx(fe, fa[ff]) | |
1366 | + | ||
1367 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1368 | + | then fe | |
1360 | 1369 | else throw("List size exceeds 5") | |
1361 | 1370 | ||
1362 | - | fc | |
1371 | + | fg(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5) | |
1363 | 1372 | } | |
1364 | - | | |
1365 | - | } | |
1366 | - | ||
1367 | - | ||
1368 | - | let | |
1369 | - | ||
1370 | - | let | |
1371 | - | ||
1372 | - | func | |
1373 | - | func | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1373 | + | gC._1 | |
1374 | + | } | |
1375 | + | ||
1376 | + | ||
1377 | + | let hy = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14] | |
1378 | + | ||
1379 | + | let hz = ["A", "B", "C", "D", "E", "F"] | |
1380 | + | ||
1381 | + | func hA (hB,gO) = { | |
1382 | + | func hC (eY,dG) = { | |
1383 | + | let fI = eY._2 | |
1384 | + | let hD = parseIntValue(dG) | |
1385 | + | let hn = if ((hD == 0)) | |
1377 | 1386 | then 0 | |
1378 | - | else if (( | |
1379 | - | then ( | |
1380 | - | else if (( | |
1387 | + | else if ((hD >= (4 * gO))) | |
1388 | + | then (hD / gO) | |
1389 | + | else if ((hD > (3 * gO))) | |
1381 | 1390 | then 3 | |
1382 | - | else ((( | |
1383 | - | $Tuple3(( | |
1391 | + | else (((hD - 1) / gO) + 1) | |
1392 | + | $Tuple3((eY._1 :+ hn), (eY._2 + 1), (eY._3 + hn)) | |
1384 | 1393 | } | |
1385 | 1394 | ||
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | let | |
1390 | - | func | |
1391 | - | then | |
1392 | - | else | |
1393 | - | ||
1394 | - | func | |
1395 | - | then | |
1395 | + | let gC = { | |
1396 | + | let fa = hB | |
1397 | + | let fb = size(fa) | |
1398 | + | let fc = $Tuple3(nil, 0, 0) | |
1399 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1400 | + | then fe | |
1401 | + | else hC(fe, fa[ff]) | |
1402 | + | ||
1403 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1404 | + | then fe | |
1396 | 1405 | else throw("List size exceeds 6") | |
1397 | 1406 | ||
1398 | - | fc | |
1407 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1399 | 1408 | } | |
1400 | - | let | |
1401 | - | let | |
1402 | - | let | |
1403 | - | func | |
1404 | - | let | |
1405 | - | then ( | |
1406 | - | else | |
1407 | - | let | |
1409 | + | let hE = gC._1 | |
1410 | + | let hF = value(indexOf(hE, max(hE))) | |
1411 | + | let hG = (gC._3 - 25) | |
1412 | + | func hH (eY,di) = { | |
1413 | + | let dS = if ((di == hF)) | |
1414 | + | then (hE[di] - hG) | |
1415 | + | else hE[di] | |
1416 | + | let dW = if ((dS == 0)) | |
1408 | 1417 | then nil | |
1409 | - | else split(drop(toString(pow(10, 0, | |
1410 | - | let | |
1411 | - | func | |
1412 | - | ||
1413 | - | let | |
1414 | - | let | |
1415 | - | let | |
1416 | - | let | |
1417 | - | func | |
1418 | - | then | |
1419 | - | else | |
1420 | - | ||
1421 | - | func | |
1422 | - | then | |
1418 | + | else split(drop(toString(pow(10, 0, dS, 0, 0, DOWN)), 1), "") | |
1419 | + | let gh = hz[di] | |
1420 | + | func hI (hJ,hK) = (hJ :+ gh) | |
1421 | + | ||
1422 | + | let hL = { | |
1423 | + | let fa = dW | |
1424 | + | let fb = size(fa) | |
1425 | + | let fc = nil | |
1426 | + | func hM (fe,ff) = if ((ff >= fb)) | |
1427 | + | then fe | |
1428 | + | else hI(fe, fa[ff]) | |
1429 | + | ||
1430 | + | func hN (fe,ff) = if ((ff >= fb)) | |
1431 | + | then fe | |
1423 | 1432 | else throw("List size exceeds 25") | |
1424 | 1433 | ||
1425 | - | | |
1426 | - | } | |
1427 | - | ( | |
1434 | + | hN(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(fc, 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) | |
1435 | + | } | |
1436 | + | (eY ++ hL) | |
1428 | 1437 | } | |
1429 | 1438 | ||
1430 | - | let | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | func | |
1435 | - | then | |
1436 | - | else | |
1437 | - | ||
1438 | - | func | |
1439 | - | then | |
1439 | + | let fj = { | |
1440 | + | let fa = cS | |
1441 | + | let fb = size(fa) | |
1442 | + | let fc = nil | |
1443 | + | func hM (fe,ff) = if ((ff >= fb)) | |
1444 | + | then fe | |
1445 | + | else hH(fe, fa[ff]) | |
1446 | + | ||
1447 | + | func hN (fe,ff) = if ((ff >= fb)) | |
1448 | + | then fe | |
1440 | 1449 | else throw("List size exceeds 6") | |
1441 | 1450 | ||
1442 | - | | |
1451 | + | hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6) | |
1443 | 1452 | } | |
1444 | - | func | |
1445 | - | ||
1446 | - | let | |
1447 | - | let | |
1448 | - | let | |
1449 | - | func | |
1450 | - | then | |
1451 | - | else | |
1452 | - | ||
1453 | - | func | |
1454 | - | then | |
1453 | + | func hO (eY,fI) = (eY + fj[fI]) | |
1454 | + | ||
1455 | + | let fa = hy | |
1456 | + | let fb = size(fa) | |
1457 | + | let fc = "" | |
1458 | + | func hP (fe,ff) = if ((ff >= fb)) | |
1459 | + | then fe | |
1460 | + | else hO(fe, fa[ff]) | |
1461 | + | ||
1462 | + | func hQ (fe,ff) = if ((ff >= fb)) | |
1463 | + | then fe | |
1455 | 1464 | else throw("List size exceeds 25") | |
1456 | 1465 | ||
1457 | - | hM(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(eY, 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) | |
1458 | - | } | |
1459 | - | ||
1460 | - | ||
1461 | - | func hN (hO) = { | |
1462 | - | let gx = split(valueOrElse(getString(hO), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1463 | - | [toString(valueOrElse(parseInt(gx[bm]), 0)), if ((size(split(gx[bn], "_")) == aI)) | |
1464 | - | then gx[bn] | |
1465 | - | else "0_0_0_0_0_0", if ((size(split(gx[bo], "_")) == aI)) | |
1466 | - | then gx[bo] | |
1467 | - | else "0_0_0_0_0_0", gx[bp]] | |
1468 | - | } | |
1469 | - | ||
1470 | - | ||
1471 | - | func hP (hQ) = { | |
1472 | - | let fs = split(hQ, "_") | |
1473 | - | ((aL * (parseIntValue(fs[1]) + 1)) * parseIntValue(fs[0])) | |
1466 | + | hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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) | |
1474 | 1467 | } | |
1475 | 1468 | ||
1476 | 1469 | ||
1477 | 1470 | func hR (hS) = { | |
1478 | - | let hT = hS[bg] | |
1479 | - | func hU (eU,hV) = (eU + parseIntValue(hV)) | |
1480 | - | ||
1481 | - | func hW (eU,hV) = { | |
1482 | - | let dg = eU._1 | |
1483 | - | let eN = (((parseIntValue(hV) + bc) - 1) / bc) | |
1484 | - | $Tuple2((dg + 1), (eU._2 + (eN * cK))) | |
1471 | + | let gB = split(valueOrElse(getString(hS), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1472 | + | [toString(valueOrElse(parseInt(gB[bn]), 0)), if ((size(split(gB[bo], "_")) == aJ)) | |
1473 | + | then gB[bo] | |
1474 | + | else "0_0_0_0_0_0", if ((size(split(gB[bp], "_")) == aJ)) | |
1475 | + | then gB[bp] | |
1476 | + | else "0_0_0_0_0_0", gB[bq]] | |
1477 | + | } | |
1478 | + | ||
1479 | + | ||
1480 | + | func hT (hU) = { | |
1481 | + | let fw = split(hU, "_") | |
1482 | + | ((aM * (parseIntValue(fw[1]) + 1)) * parseIntValue(fw[0])) | |
1483 | + | } | |
1484 | + | ||
1485 | + | ||
1486 | + | func hV (hW) = { | |
1487 | + | let hX = hW[bh] | |
1488 | + | func hY (eY,hZ) = (eY + parseIntValue(hZ)) | |
1489 | + | ||
1490 | + | func ia (eY,hZ) = { | |
1491 | + | let di = eY._1 | |
1492 | + | let eR = (((parseIntValue(hZ) + bd) - 1) / bd) | |
1493 | + | $Tuple2((di + 1), (eY._2 + (eR * cM))) | |
1485 | 1494 | } | |
1486 | 1495 | ||
1487 | - | let | |
1488 | - | let | |
1489 | - | let | |
1490 | - | let | |
1491 | - | func | |
1492 | - | then | |
1493 | - | else | |
1494 | - | ||
1495 | - | func | |
1496 | - | then | |
1496 | + | let ib = { | |
1497 | + | let fa = split(hW[bf], "_") | |
1498 | + | let fb = size(fa) | |
1499 | + | let fc = 0 | |
1500 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1501 | + | then fe | |
1502 | + | else hY(fe, fa[ff]) | |
1503 | + | ||
1504 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1505 | + | then fe | |
1497 | 1506 | else throw("List size exceeds 6") | |
1498 | 1507 | ||
1499 | - | fc | |
1508 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1500 | 1509 | } | |
1501 | - | let | |
1502 | - | let | |
1503 | - | let | |
1504 | - | let | |
1505 | - | func | |
1506 | - | then | |
1507 | - | else | |
1508 | - | ||
1509 | - | func | |
1510 | - | then | |
1510 | + | let ic = { | |
1511 | + | let fa = split(hW[bg], "_") | |
1512 | + | let fb = size(fa) | |
1513 | + | let fc = 0 | |
1514 | + | func hM (fe,ff) = if ((ff >= fb)) | |
1515 | + | then fe | |
1516 | + | else hY(fe, fa[ff]) | |
1517 | + | ||
1518 | + | func hN (fe,ff) = if ((ff >= fb)) | |
1519 | + | then fe | |
1511 | 1520 | else throw("List size exceeds 6") | |
1512 | 1521 | ||
1513 | - | | |
1522 | + | hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6) | |
1514 | 1523 | } | |
1515 | - | let | |
1524 | + | let id = if ((hX == "")) | |
1516 | 1525 | then 0 | |
1517 | - | else ( let | |
1518 | - | let | |
1519 | - | let | |
1520 | - | func | |
1521 | - | then | |
1522 | - | else | |
1523 | - | ||
1524 | - | func | |
1525 | - | then | |
1526 | + | else ( let fa = split_4C(hX, "_") | |
1527 | + | let fb = size(fa) | |
1528 | + | let fc = $Tuple2(0, 0) | |
1529 | + | func hP (fe,ff) = if ((ff >= fb)) | |
1530 | + | then fe | |
1531 | + | else ia(fe, fa[ff]) | |
1532 | + | ||
1533 | + | func hQ (fe,ff) = if ((ff >= fb)) | |
1534 | + | then fe | |
1526 | 1535 | else throw("List size exceeds 50") | |
1527 | 1536 | ||
1528 | - | | |
1529 | - | (( | |
1530 | - | } | |
1531 | - | ||
1532 | - | ||
1533 | - | func | |
1534 | - | let | |
1535 | - | let | |
1536 | - | let | |
1537 | - | let | |
1538 | - | let | |
1539 | - | let | |
1540 | - | then makeString(["0", toString( | |
1537 | + | hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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))._2 | |
1538 | + | ((ib + ic) + id) | |
1539 | + | } | |
1540 | + | ||
1541 | + | ||
1542 | + | func ie (if,ig,ih) = { | |
1543 | + | let hU = ((toString(ig) + "_") + toString(ih)) | |
1544 | + | let ii = hT(hU) | |
1545 | + | let ij = valueOrElse(getString(if), (hU + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1546 | + | let ik = split_4C(ij, ":") | |
1547 | + | let il = hV(ik) | |
1548 | + | let im = if ((5 > size(ik))) | |
1549 | + | then makeString(["0", toString(il), toString((ii - il)), toString(ii)], "_") | |
1541 | 1550 | else { | |
1542 | - | let | |
1543 | - | let | |
1544 | - | let | |
1545 | - | then parseIntValue( | |
1546 | - | else | |
1547 | - | makeString([toString( | |
1548 | - | } | |
1549 | - | [ | |
1550 | - | then | |
1551 | - | else "0_0_0_0_0_0", if ((size(split( | |
1552 | - | then | |
1553 | - | else "0_0_0_0_0_0", | |
1554 | - | } | |
1555 | - | ||
1556 | - | ||
1557 | - | func | |
1558 | - | let | |
1559 | - | let | |
1560 | - | (( | |
1561 | - | } | |
1562 | - | ||
1563 | - | ||
1564 | - | func | |
1551 | + | let in = split(ik[bi], "_") | |
1552 | + | let io = parseIntValue(in[bj]) | |
1553 | + | let ip = if ((size(in) > 1)) | |
1554 | + | then parseIntValue(in[bk]) | |
1555 | + | else il | |
1556 | + | makeString([toString(io), toString(ip), toString(((ii - io) - ip)), toString(ii)], "_") | |
1557 | + | } | |
1558 | + | [ik[be], if ((size(split(ik[bf], "_")) == aJ)) | |
1559 | + | then ik[bf] | |
1560 | + | else "0_0_0_0_0_0", if ((size(split(ik[bg], "_")) == aJ)) | |
1561 | + | then ik[bg] | |
1562 | + | else "0_0_0_0_0_0", ik[bh], im] | |
1563 | + | } | |
1564 | + | ||
1565 | + | ||
1566 | + | func iq (hW) = { | |
1567 | + | let ir = hV(hW) | |
1568 | + | let is = parseIntValue(split(hW[bi], "_")[bj]) | |
1569 | + | ((hT(hW[be]) - ir) - is) | |
1570 | + | } | |
1571 | + | ||
1572 | + | ||
1573 | + | func it (iu,hW,iv) = if ((size(iu) != 3)) | |
1565 | 1574 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1566 | 1575 | else { | |
1567 | - | let | |
1568 | - | let | |
1569 | - | let | |
1576 | + | let iw = split(iu[0], "_") | |
1577 | + | let ix = split(iu[1], "_") | |
1578 | + | let iy = if ((iu[2] == "")) | |
1570 | 1579 | then nil | |
1571 | - | else split_4C( | |
1572 | - | if ((size( | |
1580 | + | else split_4C(iu[2], "_") | |
1581 | + | if ((size(iw) != aJ)) | |
1573 | 1582 | then throw("All 6 resources should be passed") | |
1574 | - | else if ((size( | |
1583 | + | else if ((size(ix) != aJ)) | |
1575 | 1584 | then throw("All 6 materials should be passed") | |
1576 | 1585 | else { | |
1577 | - | let | |
1578 | - | let | |
1579 | - | let | |
1580 | - | let | |
1586 | + | let hg = iq(hW) | |
1587 | + | let iz = split(hW[bf], "_") | |
1588 | + | let iA = split(hW[bg], "_") | |
1589 | + | let iB = if ((hW[bh] == "")) | |
1581 | 1590 | then nil | |
1582 | - | else split_4C( | |
1583 | - | let | |
1584 | - | let | |
1585 | - | let | |
1591 | + | else split_4C(hW[bh], "_") | |
1592 | + | let he = split(iv[bo], "_") | |
1593 | + | let iC = split(iv[bp], "_") | |
1594 | + | let iD = if ((iv[bq] == "")) | |
1586 | 1595 | then nil | |
1587 | - | else split_4C( | |
1588 | - | func | |
1589 | - | let | |
1590 | - | let | |
1591 | - | let | |
1592 | - | let | |
1593 | - | if (( | |
1594 | - | then $Tuple4(( | |
1595 | - | else if (( | |
1596 | - | then if (( | |
1597 | - | then throw((((("Attempt to take " + | |
1598 | - | else $Tuple4(( | |
1599 | - | else if ((-( | |
1600 | - | then throw((((("Attempt to take " + toString(-( | |
1601 | - | else $Tuple4(( | |
1596 | + | else split_4C(iv[bq], "_") | |
1597 | + | func iE (eY,hZ) = { | |
1598 | + | let gR = eY._1 | |
1599 | + | let iF = parseIntValue(hZ) | |
1600 | + | let iG = parseIntValue(iz[gR]) | |
1601 | + | let iH = parseIntValue(he[gR]) | |
1602 | + | if ((iF == 0)) | |
1603 | + | then $Tuple4((gR + 1), (eY._2 :+ iz[gR]), (eY._3 :+ he[gR]), eY._4) | |
1604 | + | else if ((iF > 0)) | |
1605 | + | then if ((iF > iH)) | |
1606 | + | then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iH)) + " available")) | |
1607 | + | else $Tuple4((gR + 1), (eY._2 :+ toString((iG + iF))), (eY._3 :+ toString((iH - iF))), (eY._4 + iF)) | |
1608 | + | else if ((-(iF) > iG)) | |
1609 | + | then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iG)) + " available")) | |
1610 | + | else $Tuple4((gR + 1), (eY._2 :+ toString((iG + iF))), (eY._3 :+ toString((iH - iF))), (eY._4 + iF)) | |
1602 | 1611 | } | |
1603 | 1612 | ||
1604 | - | let | |
1605 | - | let | |
1606 | - | let | |
1607 | - | let | |
1608 | - | func | |
1609 | - | then | |
1610 | - | else | |
1611 | - | ||
1612 | - | func | |
1613 | - | then | |
1613 | + | let fj = { | |
1614 | + | let fa = iw | |
1615 | + | let fb = size(fa) | |
1616 | + | let fc = $Tuple4(0, nil, nil, 0) | |
1617 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1618 | + | then fe | |
1619 | + | else iE(fe, fa[ff]) | |
1620 | + | ||
1621 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1622 | + | then fe | |
1614 | 1623 | else throw("List size exceeds 6") | |
1615 | 1624 | ||
1616 | - | fc | |
1625 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1617 | 1626 | } | |
1618 | - | func | |
1619 | - | let | |
1620 | - | let | |
1621 | - | let | |
1622 | - | let | |
1623 | - | if (( | |
1624 | - | then $Tuple4(( | |
1625 | - | else if (( | |
1626 | - | then if (( | |
1627 | - | then throw((((("Attempt to take " + | |
1628 | - | else $Tuple4(( | |
1629 | - | else if ((-( | |
1630 | - | then throw((((("Attempt to take " + toString(-( | |
1631 | - | else $Tuple4(( | |
1627 | + | func iI (eY,hZ) = { | |
1628 | + | let gR = eY._1 | |
1629 | + | let iF = parseIntValue(hZ) | |
1630 | + | let iJ = parseIntValue(iA[gR]) | |
1631 | + | let iK = parseIntValue(iC[gR]) | |
1632 | + | if ((iF == 0)) | |
1633 | + | then $Tuple4((gR + 1), (eY._2 :+ iA[gR]), (eY._3 :+ iC[gR]), eY._4) | |
1634 | + | else if ((iF > 0)) | |
1635 | + | then if ((iF > iK)) | |
1636 | + | then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iK)) + " available")) | |
1637 | + | else $Tuple4((gR + 1), (eY._2 :+ toString((iJ + iF))), (eY._3 :+ toString((iK - iF))), (eY._4 + iF)) | |
1638 | + | else if ((-(iF) > iJ)) | |
1639 | + | then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iJ)) + " available")) | |
1640 | + | else $Tuple4((gR + 1), (eY._2 :+ toString((iJ + iF))), (eY._3 :+ toString((iK - iF))), (eY._4 + iF)) | |
1632 | 1641 | } | |
1633 | 1642 | ||
1634 | - | let | |
1635 | - | let | |
1636 | - | let | |
1637 | - | let | |
1638 | - | func | |
1639 | - | then | |
1640 | - | else | |
1641 | - | ||
1642 | - | func | |
1643 | - | then | |
1643 | + | let gx = { | |
1644 | + | let fa = ix | |
1645 | + | let fb = size(fa) | |
1646 | + | let fc = $Tuple4(0, nil, nil, fj._4) | |
1647 | + | func hM (fe,ff) = if ((ff >= fb)) | |
1648 | + | then fe | |
1649 | + | else iI(fe, fa[ff]) | |
1650 | + | ||
1651 | + | func hN (fe,ff) = if ((ff >= fb)) | |
1652 | + | then fe | |
1644 | 1653 | else throw("List size exceeds 6") | |
1645 | 1654 | ||
1646 | - | | |
1655 | + | hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6) | |
1647 | 1656 | } | |
1648 | - | func | |
1649 | - | let | |
1650 | - | let | |
1651 | - | let | |
1652 | - | then parseIntValue( | |
1657 | + | func iL (eY,hZ) = { | |
1658 | + | let gR = eY._1 | |
1659 | + | let iF = parseIntValue(hZ) | |
1660 | + | let iM = if ((size(iB) > gR)) | |
1661 | + | then parseIntValue(iB[gR]) | |
1653 | 1662 | else 0 | |
1654 | - | let | |
1655 | - | then parseIntValue( | |
1663 | + | let iN = if ((size(iD) > gR)) | |
1664 | + | then parseIntValue(iD[gR]) | |
1656 | 1665 | else 0 | |
1657 | - | if (( | |
1658 | - | then $Tuple4(( | |
1659 | - | else if (( | |
1660 | - | then if (( | |
1661 | - | then throw((((("Attempt to take " + | |
1666 | + | if ((iF == 0)) | |
1667 | + | then $Tuple4((gR + 1), (eY._2 :+ toString(iM)), (eY._3 :+ toString(iN)), eY._4) | |
1668 | + | else if ((iF > 0)) | |
1669 | + | then if ((iF > iN)) | |
1670 | + | then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iN)) + " available")) | |
1662 | 1671 | else { | |
1663 | - | let | |
1664 | - | $Tuple4(( | |
1672 | + | let ga = (eO((iM + iF), bd) - eO(iM, bd)) | |
1673 | + | $Tuple4((gR + 1), (eY._2 :+ toString((iM + iF))), (eY._3 :+ toString((iN - iF))), (eY._4 + ga)) | |
1665 | 1674 | } | |
1666 | - | else if ((-( | |
1667 | - | then throw((((("Attempt to take " + toString(-( | |
1675 | + | else if ((-(iF) > iM)) | |
1676 | + | then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iM)) + " available")) | |
1668 | 1677 | else { | |
1669 | - | let | |
1670 | - | $Tuple4(( | |
1678 | + | let ga = (eO((iM + iF), bd) - eO(iM, bd)) | |
1679 | + | $Tuple4((gR + 1), (eY._2 :+ toString((iM + iF))), (eY._3 :+ toString((iN - iF))), (eY._4 + ga)) | |
1671 | 1680 | } | |
1672 | 1681 | } | |
1673 | 1682 | ||
1674 | - | let | |
1683 | + | let gB = if ((size(iy) != 0)) | |
1675 | 1684 | then { | |
1676 | - | let | |
1677 | - | let | |
1678 | - | let | |
1679 | - | func | |
1680 | - | then | |
1681 | - | else | |
1682 | - | ||
1683 | - | func | |
1684 | - | then | |
1685 | + | let fa = iy | |
1686 | + | let fb = size(fa) | |
1687 | + | let fc = $Tuple4(0, nil, nil, gx._4) | |
1688 | + | func hP (fe,ff) = if ((ff >= fb)) | |
1689 | + | then fe | |
1690 | + | else iL(fe, fa[ff]) | |
1691 | + | ||
1692 | + | func hQ (fe,ff) = if ((ff >= fb)) | |
1693 | + | then fe | |
1685 | 1694 | else throw("List size exceeds 50") | |
1686 | 1695 | ||
1687 | - | | |
1696 | + | hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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) | |
1688 | 1697 | } | |
1689 | - | else $Tuple4(0, | |
1690 | - | let | |
1691 | - | if (( | |
1692 | - | then throw((((("Attempt to put total " + toString( | |
1693 | - | else $Tuple7(makeString( | |
1698 | + | else $Tuple4(0, iB, iD, gx._4) | |
1699 | + | let iO = gB._4 | |
1700 | + | if ((iO > hg)) | |
1701 | + | then throw((((("Attempt to put total " + toString(iO)) + " stuff, but only ") + toString(hg)) + " warehouse space left")) | |
1702 | + | else $Tuple7(makeString(fj._2, "_"), makeString(gx._2, "_"), makeString_2C(gB._2, "_"), makeString(fj._3, "_"), makeString(gx._3, "_"), makeString_2C(gB._3, "_"), iO) | |
1694 | 1703 | } | |
1695 | 1704 | } | |
1696 | 1705 | ||
1697 | 1706 | ||
1698 | - | func | |
1699 | - | let | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let | |
1703 | - | let | |
1704 | - | let | |
1705 | - | let | |
1706 | - | let | |
1707 | - | let | |
1708 | - | let | |
1709 | - | $Tuple2([IntegerEntry( | |
1710 | - | } | |
1711 | - | ||
1712 | - | ||
1713 | - | func | |
1707 | + | func iP (iQ,iR) = { | |
1708 | + | let bR = toString(iQ) | |
1709 | + | let iS = hm(toBigInt(iR)) | |
1710 | + | let iT = valueOrElse(getInteger(ev()), (eu + 1)) | |
1711 | + | let ez = toString(iT) | |
1712 | + | let hv = toInt((iS % eo)) | |
1713 | + | let gU = ht(iS, hv) | |
1714 | + | let dB = aV[hv] | |
1715 | + | let iU = Issue(eN(ez, "S"), makeString([ez, "S", gU, dB], "_"), 1, 0, false) | |
1716 | + | let bv = calculateAssetId(iU) | |
1717 | + | let iV = toBase58String(bv) | |
1718 | + | $Tuple2([IntegerEntry(ev(), (iT + 1)), iU, StringEntry(ey(ez), iV), StringEntry(bu(iV), bR), StringEntry(eB(ez), bR), IntegerEntry(bE(iV), 0), IntegerEntry(eA(iV, bR), 0), ScriptTransfer(iQ, 1, bv)], $Tuple2(iV, dB)) | |
1719 | + | } | |
1720 | + | ||
1721 | + | ||
1722 | + | func iW (bR,iX,iY) = if (!(sigVerify_8Kb(iX, iY, ee))) | |
1714 | 1723 | then throw("signature does not match") | |
1715 | 1724 | else { | |
1716 | - | let | |
1717 | - | let | |
1718 | - | let | |
1719 | - | let | |
1720 | - | let | |
1721 | - | let | |
1722 | - | let | |
1723 | - | let | |
1724 | - | if (if (( | |
1725 | + | let fw = split_4C(toUtf8String(iX), ";") | |
1726 | + | let iZ = split_4C(fw[0], "|") | |
1727 | + | let ja = split(iZ[eJ], "_") | |
1728 | + | let jb = parseIntValue(ja[0]) | |
1729 | + | let jc = parseIntValue(ja[1]) | |
1730 | + | let jd = split(fw[1], ":") | |
1731 | + | let je = jd[0] | |
1732 | + | let jf = parseIntValue(iZ[eK]) | |
1733 | + | if (if ((jf > (lastBlock.timestamp + eg))) | |
1725 | 1734 | then true | |
1726 | - | else ((lastBlock.timestamp - | |
1727 | - | then throw(((("signature outdated: logTime=" + toString( | |
1735 | + | else ((lastBlock.timestamp - eg) > jf)) | |
1736 | + | then throw(((("signature outdated: logTime=" + toString(jf)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1728 | 1737 | else { | |
1729 | - | let | |
1730 | - | let | |
1731 | - | if (( | |
1732 | - | then throw(((("Tx ids don't match! In state: " + | |
1738 | + | let jg = jd[1] | |
1739 | + | let jh = valueOrElse(getString(dQ(bR)), "") | |
1740 | + | if ((jh != jg)) | |
1741 | + | then throw(((("Tx ids don't match! In state: " + jh) + ", in msg: ") + jg)) | |
1733 | 1742 | else { | |
1734 | - | let B = valueOrErrorMessage(getString( | |
1735 | - | let | |
1736 | - | let | |
1737 | - | let | |
1738 | - | if (( | |
1739 | - | then throw(((("oldHealth=" + toString( | |
1740 | - | else if ((0 >= | |
1743 | + | let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked") | |
1744 | + | let ji = A(B) | |
1745 | + | let jj = aj(valueOrElse(getInteger(E(B)), 0)) | |
1746 | + | let jk = valueOrElse(getInteger(ji), jj) | |
1747 | + | if ((jk != jb)) | |
1748 | + | then throw(((("oldHealth=" + toString(jk)) + " from state does not match one from flight log=") + toString(jb))) | |
1749 | + | else if ((0 >= jb)) | |
1741 | 1750 | then throw("You can't fly with zero health") | |
1742 | - | else if (!( | |
1751 | + | else if (!(gD(B))) | |
1743 | 1752 | then throw("Equipment incompatible") | |
1744 | 1753 | else { | |
1745 | - | let | |
1746 | - | then | |
1754 | + | let jl = if ((size(iZ) > eL)) | |
1755 | + | then iZ[eL] | |
1747 | 1756 | else "" | |
1748 | - | let | |
1749 | - | then | |
1757 | + | let jm = if ((size(iZ) > eM)) | |
1758 | + | then iZ[eM] | |
1750 | 1759 | else "" | |
1751 | - | let | |
1752 | - | then ( | |
1760 | + | let jn = if (if ((jc > 0)) | |
1761 | + | then (jl == "$") | |
1753 | 1762 | else false) | |
1754 | - | then | |
1763 | + | then dH(invoke(dj, "sendUsdtPrize", [bR], nil)) | |
1755 | 1764 | else 0 | |
1756 | - | $Tuple5( | |
1765 | + | $Tuple5(jc, B, jn, je, jm) | |
1757 | 1766 | } | |
1758 | 1767 | } | |
1759 | 1768 | } | |
1760 | 1769 | } | |
1761 | 1770 | ||
1762 | 1771 | ||
1763 | - | func | |
1764 | - | let | |
1765 | - | let | |
1766 | - | let | |
1767 | - | let | |
1768 | - | (( | |
1769 | - | } | |
1770 | - | ||
1771 | - | ||
1772 | - | func | |
1773 | - | let | |
1774 | - | then $Tuple2( | |
1772 | + | func jo (Q,jp) = { | |
1773 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
1774 | + | let jq = valueOrElse(getInteger(by(aI, Q)), 0) | |
1775 | + | let jr = (ih / 6) | |
1776 | + | let js = (ih / 7) | |
1777 | + | ((aL + fraction(aL, ((ih + jr) + (2 * js)), 5)) + fraction(aL, jq, (jp * 5))) | |
1778 | + | } | |
1779 | + | ||
1780 | + | ||
1781 | + | func jt (c,ju,jv) = { | |
1782 | + | let jw = if ((ju == eG)) | |
1783 | + | then $Tuple2(jv, valueOrElse(getString(bN(c)), "")) | |
1775 | 1784 | else { | |
1776 | - | let B = valueOrErrorMessage(getString( | |
1777 | - | let | |
1778 | - | let | |
1779 | - | if (( | |
1780 | - | then throw((("Duck location type is " + | |
1781 | - | else $Tuple2( | |
1782 | - | } | |
1783 | - | let Q = | |
1784 | - | let | |
1785 | - | let | |
1786 | - | let | |
1787 | - | let | |
1788 | - | let | |
1789 | - | if (( | |
1785 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
1786 | + | let jx = valueOrElse(getString(bP(B)), aN) | |
1787 | + | let cl = split(value(jx), "_") | |
1788 | + | if ((cl[bs] != "L")) | |
1789 | + | then throw((("Duck location type is " + cl[bs]) + ", but should be L")) | |
1790 | + | else $Tuple2(cl[bt], B) | |
1791 | + | } | |
1792 | + | let Q = jw._1 | |
1793 | + | let jy = jw._2 | |
1794 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
1795 | + | let jA = bx(Q) | |
1796 | + | let jB = valueOrErrorMessage(getInteger(jA), (("Land " + jz.name) + " is not staked")) | |
1797 | + | let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned")) | |
1798 | + | if ((jC != c)) | |
1790 | 1799 | then throw((aF + " is not yours")) | |
1791 | 1800 | else { | |
1792 | - | let | |
1793 | - | $Tuple4( | |
1794 | - | } | |
1795 | - | } | |
1796 | - | ||
1797 | - | ||
1798 | - | func | |
1801 | + | let jD = split(jz.description, "_") | |
1802 | + | $Tuple4(jy, Q, jD, jB) | |
1803 | + | } | |
1804 | + | } | |
1805 | + | ||
1806 | + | ||
1807 | + | func jE (c,eP,ju,jv) = if ((0 > eP)) | |
1799 | 1808 | then throw("Negative amount") | |
1800 | 1809 | else { | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | let | |
1805 | - | if ((0 > | |
1806 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1810 | + | let gh = jt(c, ju, jv) | |
1811 | + | let dN = gh._3[dq] | |
1812 | + | let gN = gT(gh._3[dr]) | |
1813 | + | let gX = (lastBlock.timestamp - gh._4) | |
1814 | + | if ((0 > gX)) | |
1815 | + | then throw(((("Saved timestamp is in future, saved = " + toString(gh._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1807 | 1816 | else { | |
1808 | - | let | |
1809 | - | let | |
1810 | - | let | |
1811 | - | if (( | |
1812 | - | then throw(((("Not enough resources, available = " + toString( | |
1817 | + | let jp = dM(dN) | |
1818 | + | let jF = jo(gh._2, jp) | |
1819 | + | let jG = fraction(gX, (jF * jp), a) | |
1820 | + | if ((eP > jG)) | |
1821 | + | then throw(((("Not enough resources, available = " + toString(jG)) + ", requested = ") + toString(eP))) | |
1813 | 1822 | else { | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | let | |
1818 | - | let | |
1819 | - | let | |
1820 | - | let | |
1821 | - | let | |
1822 | - | let | |
1823 | - | if (if (( | |
1824 | - | then ( | |
1823 | + | let jH = fraction((jG - eP), a, (jF * jp)) | |
1824 | + | let jI = (lastBlock.timestamp - jH) | |
1825 | + | let ig = (jp / cN) | |
1826 | + | let hf = hb(gN, (gX - jH), ig, jF) | |
1827 | + | let if = bD(gh._2) | |
1828 | + | let ih = valueOrElse(getInteger(bE(gh._2)), 0) | |
1829 | + | let hW = ie(if, ig, ih) | |
1830 | + | let in = split(hW[bi], "_") | |
1831 | + | let hg = parseIntValue(in[bl]) | |
1832 | + | if (if ((ju == eG)) | |
1833 | + | then (eP > hg) | |
1825 | 1834 | else false) | |
1826 | - | then throw((("Only " + toString( | |
1835 | + | then throw((("Only " + toString(hg)) + " space left in warehouse")) | |
1827 | 1836 | else { | |
1828 | - | let | |
1829 | - | let | |
1830 | - | let | |
1831 | - | let | |
1832 | - | let | |
1833 | - | then $Tuple4( | |
1834 | - | else if (( | |
1835 | - | then $Tuple4( | |
1837 | + | let hS = bO(gh._1) | |
1838 | + | let iv = hR(hS) | |
1839 | + | let he = split(iv[bo], "_") | |
1840 | + | let hd = split(hW[bf], "_") | |
1841 | + | let jJ = if ((ju == eG)) | |
1842 | + | then $Tuple4(gV(hd, gN, (gX - jH), ig, jF), iv[bo], (parseIntValue(in[bk]) + hf._2), (parseIntValue(in[bl]) - hf._2)) | |
1843 | + | else if ((ju == eH)) | |
1844 | + | then $Tuple4(hW[bf], gV(he, gN, (gX - jH), ig, jF), parseIntValue(in[bk]), parseIntValue(in[bl])) | |
1836 | 1845 | else { | |
1837 | - | let | |
1838 | - | let | |
1839 | - | $Tuple4( | |
1846 | + | let jK = hc(hd, he, hf, hg) | |
1847 | + | let jL = min([parseIntValue(in[bl]), hf._2]) | |
1848 | + | $Tuple4(jK._1, jK._2, (parseIntValue(in[bk]) + jL), (parseIntValue(in[bl]) - jL)) | |
1840 | 1849 | } | |
1841 | - | let | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let | |
1845 | - | $Tuple5([IntegerEntry( | |
1850 | + | let jM = jJ._1 | |
1851 | + | let jN = jJ._2 | |
1852 | + | let jO = jJ._3 | |
1853 | + | let jP = jJ._4 | |
1854 | + | $Tuple5([IntegerEntry(bx(gh._2), jI), IntegerEntry(bA(aF, gh._2, c), jI)], hS, [iv[bn], jN, iv[bp], iv[bq]], if, [hW[be], jM, hW[bg], hW[bh], makeString([in[bj], toString(jO), toString(jP), in[bm]], "_")]) | |
1846 | 1855 | } | |
1847 | 1856 | } | |
1848 | 1857 | } | |
1849 | 1858 | } | |
1850 | 1859 | ||
1851 | 1860 | ||
1852 | - | func | |
1853 | - | let | |
1854 | - | let | |
1855 | - | let | |
1856 | - | | |
1857 | - | } | |
1858 | - | ||
1859 | - | ||
1860 | - | func | |
1861 | - | let c = toString( | |
1862 | - | let | |
1863 | - | let | |
1864 | - | let | |
1865 | - | let | |
1866 | - | if (if (!( | |
1867 | - | then ( | |
1861 | + | func jQ (c,Q,jp,ju) = { | |
1862 | + | let jA = bx(Q) | |
1863 | + | let jB = value(getInteger(jA)) | |
1864 | + | let jG = (fraction((lastBlock.timestamp - jB), jo(Q, jp), a) * jp) | |
1865 | + | jE(c, jG, ju, Q) | |
1866 | + | } | |
1867 | + | ||
1868 | + | ||
1869 | + | func jR (fl,iQ,jS,Q) = { | |
1870 | + | let c = toString(iQ) | |
1871 | + | let gh = jt(c, eI, Q) | |
1872 | + | let jp = dM(gh._3[dq]) | |
1873 | + | let jT = bE(gh._2) | |
1874 | + | let jU = valueOrElse(getInteger(jT), 0) | |
1875 | + | if (if (!(cA)) | |
1876 | + | then (jU >= 3) | |
1868 | 1877 | else false) | |
1869 | 1878 | then throw("Currently max infrastructure level = 3") | |
1870 | 1879 | else { | |
1871 | - | let | |
1872 | - | let ao = ( | |
1873 | - | if (if ( | |
1874 | - | then (ao > | |
1880 | + | let jV = ((sqrt(jp, 0, 0, DOWN) / 5) + 2) | |
1881 | + | let ao = (jU + 1) | |
1882 | + | if (if (cA) | |
1883 | + | then (ao > jV) | |
1875 | 1884 | else false) | |
1876 | - | then throw(("Currently max infrastructure level = " + toString( | |
1885 | + | then throw(("Currently max infrastructure level = " + toString(jV))) | |
1877 | 1886 | else { | |
1878 | - | let | |
1879 | - | if (if (!( | |
1880 | - | then ( | |
1887 | + | let jW = fraction(ej, (jp * ao), cN) | |
1888 | + | if (if (!(fl)) | |
1889 | + | then (jS != jW) | |
1881 | 1890 | else false) | |
1882 | - | then throw(("Payment attached should be " + toString( | |
1891 | + | then throw(("Payment attached should be " + toString(jW))) | |
1883 | 1892 | else { | |
1884 | - | let | |
1885 | - | let | |
1886 | - | let | |
1887 | - | let | |
1888 | - | let | |
1889 | - | let | |
1890 | - | let | |
1891 | - | let | |
1892 | - | let | |
1893 | - | let | |
1894 | - | let | |
1895 | - | let | |
1896 | - | $Tuple3(([IntegerEntry( | |
1893 | + | let hS = bO(gh._1) | |
1894 | + | let iv = hR(hS) | |
1895 | + | let jX = split(iv[bp], "_") | |
1896 | + | let jY = fraction(cH, (jp * ao), cN) | |
1897 | + | let jZ = makeString(fk(fl, jX, jY), "_") | |
1898 | + | let ka = jQ(c, gh._2, jp, eI) | |
1899 | + | let kb = ka._5 | |
1900 | + | let kc = hT(kb[be]) | |
1901 | + | let kd = makeString([split(kb[be], "_")[0], toString(ao)], "_") | |
1902 | + | let ke = hT(kd) | |
1903 | + | let in = split(kb[bi], "_") | |
1904 | + | let kf = makeString([in[bj], in[bk], toString(((parseIntValue(in[bl]) + ke) - kc)), toString(ke)], "_") | |
1905 | + | $Tuple3(([IntegerEntry(jT, ao), IntegerEntry(eA(gh._2, c), ao), StringEntry(hS, makeString([iv[bn], ka._3[bo], jZ, iv[bq]], ":")), StringEntry(ka._4, makeString([kd, kb[bf], kb[bg], kb[bh], kf], ":"))] ++ ka._1), ao, jY) | |
1897 | 1906 | } | |
1898 | 1907 | } | |
1899 | 1908 | } | |
1900 | 1909 | } | |
1901 | 1910 | ||
1902 | 1911 | ||
1903 | - | func kc (kd,ke,kf,kg) = { | |
1904 | - | let ai = valueOrElse(getInteger(ke), 0) | |
1905 | - | let an = (ai + kg) | |
1906 | - | let kh = al(valueOrElse(getInteger(kd), 0), an) | |
1907 | - | $Tuple2([IntegerEntry(kd, kh[0]), IntegerEntry(ke, an), IntegerEntry(kf, (valueOrElse(getInteger(kf), 0) + kh[1]))], an) | |
1908 | - | } | |
1909 | - | ||
1910 | - | ||
1911 | - | func ki (B,kg) = kc(E(B), D(B), F(B), kg) | |
1912 | - | ||
1913 | - | ||
1914 | - | func kj (c,kg) = kc(I(c), H(c), J(c), kg) | |
1915 | - | ||
1916 | - | ||
1917 | - | func kk (c) = { | |
1918 | - | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
1919 | - | let kl = bH(c) | |
1920 | - | let km = getString(kl) | |
1921 | - | if (!(isDefined(km))) | |
1912 | + | func kg (kh,ki,kj,kk) = { | |
1913 | + | let ai = valueOrElse(getInteger(ki), 0) | |
1914 | + | let an = (ai + kk) | |
1915 | + | let kl = al(valueOrElse(getInteger(kh), 0), an) | |
1916 | + | $Tuple2([IntegerEntry(kh, kl[0]), IntegerEntry(ki, an), IntegerEntry(kj, (valueOrElse(getInteger(kj), 0) + kl[1]))], an) | |
1917 | + | } | |
1918 | + | ||
1919 | + | ||
1920 | + | func km (B,kk) = { | |
1921 | + | let jz = value(assetInfo(fromBase58String(B))) | |
1922 | + | let c = valueOrErrorMessage(getString(bM(B)), (("NFT " + jz.name) + " is orphaned")) | |
1923 | + | if (if (if (cB) | |
1924 | + | then (jz.issuer == this) | |
1925 | + | else false) | |
1926 | + | then contains(jz.name, aH) | |
1927 | + | else false) | |
1928 | + | then kg(I(c), H(c), J(c), kk) | |
1929 | + | else kg(E(B), D(B), F(B), kk) | |
1930 | + | } | |
1931 | + | ||
1932 | + | ||
1933 | + | func kn (c,kk) = kg(I(c), H(c), J(c), kk) | |
1934 | + | ||
1935 | + | ||
1936 | + | func ko (c) = { | |
1937 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
1938 | + | let kp = bI(c) | |
1939 | + | let kq = getString(kp) | |
1940 | + | if (!(isDefined(kq))) | |
1922 | 1941 | then throw("You are not eligible for ONBOARD artifact") | |
1923 | 1942 | else { | |
1924 | - | let | |
1925 | - | let | |
1926 | - | if (isDefined( | |
1927 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1943 | + | let kr = bK(c) | |
1944 | + | let ks = getString(kr) | |
1945 | + | if (isDefined(ks)) | |
1946 | + | then throw(("You already used your ONBOARD artifact on duck " + value(ks))) | |
1928 | 1947 | else { | |
1929 | - | let | |
1930 | - | let | |
1931 | - | if (isDefined( | |
1932 | - | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value( | |
1933 | - | else ([StringEntry( | |
1948 | + | let kt = bJ(B) | |
1949 | + | let ku = getString(kt) | |
1950 | + | if (isDefined(ku)) | |
1951 | + | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(ku))) | |
1952 | + | else ([StringEntry(kr, B), StringEntry(kt, c)] ++ km(B, af)._1) | |
1934 | 1953 | } | |
1935 | 1954 | } | |
1936 | 1955 | } | |
1937 | 1956 | ||
1938 | 1957 | ||
1939 | - | func | |
1940 | - | let | |
1941 | - | let Q = | |
1942 | - | let | |
1943 | - | let | |
1944 | - | if ((valueOrElse(getInteger( | |
1958 | + | func kv (c,jv) = { | |
1959 | + | let gh = jt(c, eI, jv) | |
1960 | + | let Q = gh._2 | |
1961 | + | let jp = dM(gh._3[dq]) | |
1962 | + | let kw = by(aI, Q) | |
1963 | + | if ((valueOrElse(getInteger(kw), 0) > 0)) | |
1945 | 1964 | then throw("Presale artifact is already activated") | |
1946 | - | else if ((parseIntValue( | |
1965 | + | else if ((parseIntValue(gh._3[dp]) > eu)) | |
1947 | 1966 | then throw((((aF + " ") + Q) + " is not eligible for presale artifact")) | |
1948 | 1967 | else { | |
1949 | - | let | |
1950 | - | ((( | |
1968 | + | let ka = jQ(c, Q, jp, eI) | |
1969 | + | (((ka._1 :+ IntegerEntry(kw, jp)) :+ StringEntry(ka._2, makeString(ka._3, ":"))) :+ StringEntry(ka._4, makeString(ka._5, ":"))) | |
1951 | 1970 | } | |
1952 | 1971 | } | |
1953 | 1972 | ||
1954 | 1973 | ||
1955 | - | func | |
1956 | - | let | |
1957 | - | let | |
1974 | + | func kx (B) = { | |
1975 | + | let ck = valueOrElse(getInteger(dn, bV), 0) | |
1976 | + | let jx = split(valueOrElse(getString(bP(B)), aN), "_") | |
1958 | 1977 | let aA = lastBlock.timestamp | |
1959 | - | let | |
1960 | - | let | |
1961 | - | let | |
1962 | - | if (( | |
1978 | + | let cm = ce(dn, ck) | |
1979 | + | let cg = cm[ca] | |
1980 | + | let ch = cm[cb] | |
1981 | + | if ((jx[bs] != "T")) | |
1963 | 1982 | then false | |
1964 | - | else if (if (if ((parseIntValue( | |
1965 | - | then ( | |
1983 | + | else if (if (if ((parseIntValue(jx[br]) == ck)) | |
1984 | + | then (ch[cd] == "INPROGRESS") | |
1966 | 1985 | else false) | |
1967 | - | then (parseIntValue( | |
1986 | + | then (parseIntValue(cg[cc]) > aA) | |
1968 | 1987 | else false) | |
1969 | 1988 | then throw("Your duck is taking part in the tournament") | |
1970 | - | else | |
1971 | - | } | |
1972 | - | ||
1973 | - | ||
1974 | - | func | |
1975 | - | let | |
1989 | + | else dL(invoke(this, "exitTournamentInternal", [B], nil)) | |
1990 | + | } | |
1991 | + | ||
1992 | + | ||
1993 | + | func ky (B) = { | |
1994 | + | let jx = split(valueOrElse(getString(bP(B)), aN), "_") | |
1976 | 1995 | let aA = lastBlock.timestamp | |
1977 | - | if (( | |
1996 | + | if ((jx[bs] != "D")) | |
1978 | 1997 | then false | |
1979 | 1998 | else { | |
1980 | - | let | |
1981 | - | let | |
1982 | - | if (if ((( | |
1983 | - | then (1 > | |
1999 | + | let co = parseIntValue(jx[br]) | |
2000 | + | let cp = parseIntValue(jx[bt]) | |
2001 | + | if (if (((co + aR) > aA)) | |
2002 | + | then (1 > cp) | |
1984 | 2003 | else false) | |
1985 | 2004 | then throw("Your duck is on delivery mission") | |
1986 | - | else | |
1987 | - | } | |
1988 | - | } | |
1989 | - | ||
1990 | - | ||
1991 | - | func | |
1992 | - | let | |
2005 | + | else dL(invoke(this, "exitDeliveryInternal", [B], nil)) | |
2006 | + | } | |
2007 | + | } | |
2008 | + | ||
2009 | + | ||
2010 | + | func kz (B,fQ,jc,kA) = { | |
2011 | + | let jx = split(valueOrElse(getString(bP(B)), aN), "_") | |
1993 | 2012 | let aA = lastBlock.timestamp | |
1994 | - | let | |
1995 | - | let | |
1996 | - | let | |
1997 | - | let | |
1998 | - | let | |
1999 | - | let | |
2013 | + | let co = parseIntValue(jx[br]) | |
2014 | + | let cp = parseIntValue(jx[bt]) | |
2015 | + | let jC = valueOrErrorMessage(getString(bM(B)), "NFT duck is orphaned") | |
2016 | + | let kB = A(B) | |
2017 | + | let kC = getIntegerValue(kB) | |
2018 | + | let kD = if (if ((cp > 0)) | |
2000 | 2019 | then true | |
2001 | - | else if (if ( | |
2002 | - | then ( | |
2020 | + | else if (if (fQ) | |
2021 | + | then (kA > 0) | |
2003 | 2022 | else false) | |
2004 | - | then ( | |
2023 | + | then (jc > 0) | |
2005 | 2024 | else false) | |
2006 | 2025 | then { | |
2007 | - | let | |
2008 | - | if (( | |
2026 | + | let kE = invoke(dk, "sendDeliveryReward", [jC], nil) | |
2027 | + | if ((kE == kE)) | |
2009 | 2028 | then { | |
2010 | - | let | |
2011 | - | [IntegerEntry( | |
2029 | + | let kF = V(jC) | |
2030 | + | [IntegerEntry(kF, (valueOrElse(getInteger(kF), 0) + 1)), IntegerEntry(W(jC), (co / a))] | |
2012 | 2031 | } | |
2013 | 2032 | else throw("Strict value is not equal to itself.") | |
2014 | 2033 | } | |
2015 | - | else if (if (if ( | |
2016 | - | then ( | |
2034 | + | else if (if (if (fQ) | |
2035 | + | then (jc > 0) | |
2017 | 2036 | else false) | |
2018 | - | then (( | |
2037 | + | then ((co + aR) > aA) | |
2019 | 2038 | else false) | |
2020 | 2039 | then throw("Your duck is still on delivery mission") | |
2021 | 2040 | else { | |
2022 | - | let | |
2023 | - | let | |
2024 | - | if (( | |
2025 | - | then if (if (if ( | |
2026 | - | then (0 >= | |
2041 | + | let kG = valueOrElse(getInteger(dk, bU), 0) | |
2042 | + | let kH = invoke(dk, "updateDeliveryLocked", [(kG - aQ)], nil) | |
2043 | + | if ((kH == kH)) | |
2044 | + | then if (if (if (fQ) | |
2045 | + | then (0 >= jc) | |
2027 | 2046 | else false) | |
2028 | 2047 | then true | |
2029 | - | else (0 >= | |
2048 | + | else (0 >= kC)) | |
2030 | 2049 | then nil | |
2031 | - | else [IntegerEntry(U(B), ( | |
2050 | + | else [IntegerEntry(U(B), (co + cJ))] | |
2032 | 2051 | else throw("Strict value is not equal to itself.") | |
2033 | 2052 | } | |
2034 | - | let | |
2035 | - | $Tuple3( | |
2036 | - | } | |
2037 | - | ||
2038 | - | ||
2039 | - | func | |
2040 | - | let B = valueOrErrorMessage(getString( | |
2041 | - | if ( | |
2053 | + | let kI = getStringValue(L(B)) | |
2054 | + | $Tuple3(kD, [StringEntry(bP(B), kI)], kI) | |
2055 | + | } | |
2056 | + | ||
2057 | + | ||
2058 | + | func kJ (kK,ao,kL,c,kM,kN) = { | |
2059 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
2060 | + | if (kx(B)) | |
2042 | 2061 | then throw("mergeInternal_checkTournament") | |
2043 | - | else if ( | |
2062 | + | else if (ky(B)) | |
2044 | 2063 | then throw("mergeInternal_checkDelivery") | |
2045 | 2064 | else { | |
2046 | - | func | |
2047 | - | let | |
2048 | - | let | |
2049 | - | let | |
2050 | - | let | |
2051 | - | if (( | |
2065 | + | func kO (eY,Q) = { | |
2066 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
2067 | + | let jA = bx(Q) | |
2068 | + | let jB = valueOrErrorMessage(getInteger(jA), (("NFT " + jz.name) + " is not staked")) | |
2069 | + | let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned")) | |
2070 | + | if ((jC != c)) | |
2052 | 2071 | then throw((aF + " is not yours")) | |
2053 | 2072 | else { | |
2054 | - | let | |
2055 | - | let | |
2056 | - | if (if (( | |
2057 | - | then ( | |
2073 | + | let jD = split(jz.description, "_") | |
2074 | + | let dB = jD[ds] | |
2075 | + | if (if ((eY._3 != "")) | |
2076 | + | then (eY._3 != dB) | |
2058 | 2077 | else false) | |
2059 | 2078 | then throw("Lands should be on the same continent to merge") | |
2060 | 2079 | else { | |
2061 | - | let | |
2062 | - | let | |
2063 | - | let | |
2064 | - | let | |
2065 | - | let | |
2066 | - | let | |
2067 | - | let | |
2068 | - | let | |
2069 | - | let | |
2070 | - | if (("S" == | |
2080 | + | let dN = jD[dq] | |
2081 | + | let kP = eY._1 | |
2082 | + | let gR = valueOrErrorMessage(indexOf(kP, dN), "You haven't passed all the lands needed") | |
2083 | + | let kQ = (take(kP, gR) + drop(kP, (gR + 1))) | |
2084 | + | let jp = dM(dN) | |
2085 | + | let kR = (eY._2 + valueOrElse(getInteger(by(aI, Q)), 0)) | |
2086 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
2087 | + | let kS = { | |
2088 | + | let cF = dN | |
2089 | + | if (("S" == cF)) | |
2071 | 2090 | then 3 | |
2072 | - | else if (("M" == | |
2091 | + | else if (("M" == cF)) | |
2073 | 2092 | then 4 | |
2074 | - | else if (("L" == | |
2093 | + | else if (("L" == cF)) | |
2075 | 2094 | then 5 | |
2076 | - | else if (("XL" == | |
2095 | + | else if (("XL" == cF)) | |
2077 | 2096 | then 6 | |
2078 | 2097 | else throw("Only S, M, L, XL can merge") | |
2079 | 2098 | } | |
2080 | - | if (( | |
2099 | + | if ((ih != kS)) | |
2081 | 2100 | then throw("All lands should be maxed to merge") | |
2082 | 2101 | else { | |
2083 | - | let | |
2084 | - | let | |
2085 | - | let | |
2086 | - | if ((0 > | |
2087 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
2102 | + | let ez = jD[dp] | |
2103 | + | let gN = gT(jD[dr]) | |
2104 | + | let gX = (lastBlock.timestamp - jB) | |
2105 | + | if ((0 > gX)) | |
2106 | + | then throw(((("Saved timestamp is in future, saved = " + toString(jB)) + ", current = ") + toString(lastBlock.timestamp))) | |
2088 | 2107 | else { | |
2089 | - | let | |
2090 | - | let | |
2091 | - | let | |
2092 | - | let | |
2093 | - | let | |
2094 | - | let | |
2095 | - | let | |
2096 | - | let | |
2097 | - | if (!(isDefined( | |
2108 | + | let jF = jo(Q, jp) | |
2109 | + | let ig = (jp / cN) | |
2110 | + | let jN = gV(split(eY._4, "_"), gN, gX, ig, jF) | |
2111 | + | let fi = gL(eY._6, gN, ig, -1) | |
2112 | + | let kT = gL(eY._10, gN, ig, -1) | |
2113 | + | let hB = gL(eY._9, gN, ig, 1) | |
2114 | + | let kU = eY._7 | |
2115 | + | let di = indexOf(kU, Q) | |
2116 | + | if (!(isDefined(di))) | |
2098 | 2117 | then throw(("Your staked lands don't contain " + Q)) | |
2099 | 2118 | else { | |
2100 | - | let | |
2101 | - | let | |
2102 | - | $Tuple10( | |
2103 | - | then [DeleteEntry( | |
2104 | - | else nil)), | |
2119 | + | let kV = bw(Q) | |
2120 | + | let kW = valueOrElse(getString(kV), "") | |
2121 | + | $Tuple10(kQ, kR, dB, jN, ((((((((((((eY._5 :+ DeleteEntry(bx(Q))) :+ DeleteEntry(bA(aF, Q, c))) :+ DeleteEntry(ey(ez))) :+ DeleteEntry(bu(Q))) :+ DeleteEntry(bE(Q))) :+ DeleteEntry(eA(Q, c))) :+ DeleteEntry(by(aI, Q))) :+ DeleteEntry(eB(ez))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(kV)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kW != "")) | |
2122 | + | then [DeleteEntry(ew(kW))] | |
2123 | + | else nil)), fi, removeByIndex(kU, value(di)), (eY._8 + jp), hB, kT) | |
2105 | 2124 | } | |
2106 | 2125 | } | |
2107 | 2126 | } | |
2109 | 2128 | } | |
2110 | 2129 | } | |
2111 | 2130 | ||
2112 | - | let | |
2113 | - | let | |
2114 | - | let | |
2115 | - | let | |
2116 | - | let | |
2117 | - | let | |
2118 | - | then split_51C(value( | |
2131 | + | let hS = bO(B) | |
2132 | + | let iv = hR(hS) | |
2133 | + | let gM = split(valueOrElse(getString(dz()), "0_0_0_0_0_0"), "_") | |
2134 | + | let kX = dC(c) | |
2135 | + | let kY = getString(kX) | |
2136 | + | let kZ = if (isDefined(kY)) | |
2137 | + | then split_51C(value(kY), "_") | |
2119 | 2138 | else nil | |
2120 | - | let | |
2121 | - | let | |
2122 | - | let | |
2123 | - | let | |
2124 | - | let | |
2125 | - | let | |
2126 | - | func | |
2127 | - | then | |
2128 | - | else | |
2129 | - | ||
2130 | - | func | |
2131 | - | then | |
2139 | + | let la = split(value(assetInfo(fromBase58String(kM[0]))).description, "_")[ds] | |
2140 | + | let lb = split(valueOrElse(getString(dA(la)), "0_0_0_0_0_0"), "_") | |
2141 | + | let fj = { | |
2142 | + | let fa = kM | |
2143 | + | let fb = size(fa) | |
2144 | + | let fc = $Tuple10(kL, 0, "", iv[bo], nil, gM, kZ, 0, split("0_0_0_0_0_0", "_"), lb) | |
2145 | + | func fd (fe,ff) = if ((ff >= fb)) | |
2146 | + | then fe | |
2147 | + | else kO(fe, fa[ff]) | |
2148 | + | ||
2149 | + | func fg (fe,ff) = if ((ff >= fb)) | |
2150 | + | then fe | |
2132 | 2151 | else throw("List size exceeds 5") | |
2133 | 2152 | ||
2134 | - | fc | |
2153 | + | fg(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5) | |
2135 | 2154 | } | |
2136 | - | let | |
2137 | - | let | |
2138 | - | let | |
2139 | - | let | |
2140 | - | let | |
2141 | - | let | |
2142 | - | let | |
2143 | - | let | |
2144 | - | let | |
2145 | - | let | |
2146 | - | let | |
2147 | - | $Tuple2(((((((((((((((( | |
2148 | - | then StringEntry( | |
2149 | - | else DeleteEntry( | |
2155 | + | let dB = fj._3 | |
2156 | + | let hv = valueOrErrorMessage(indexOf(aV, dB), ("Unknown continent: " + dB)) | |
2157 | + | let gU = hA(fj._9, (dM(kK) / cN)) | |
2158 | + | let iT = valueOrElse(getInteger(ev()), (eu + 1)) | |
2159 | + | let lc = toString(iT) | |
2160 | + | let iU = Issue(eN(lc, kK), makeString([lc, kK, gU, dB], "_"), 1, 0, false) | |
2161 | + | let bv = calculateAssetId(iU) | |
2162 | + | let ld = toBase58String(bv) | |
2163 | + | let jZ = makeString(fk((kN > 0), split(iv[bp], "_"), kN), "_") | |
2164 | + | let le = dD(c) | |
2165 | + | let lf = valueOrElse(getInteger(le), 0) | |
2166 | + | $Tuple2((((((((((((((((fj._5 :+ (if ((size(fj._7) > 0)) | |
2167 | + | then StringEntry(kX, makeString_11C(fj._7, "_")) | |
2168 | + | else DeleteEntry(kX))) :+ IntegerEntry(le, if ((fj._8 > lf)) | |
2150 | 2169 | then 0 | |
2151 | - | else ( | |
2170 | + | else (lf - fj._8))) :+ IntegerEntry(ev(), (iT + 1))) :+ iU) :+ StringEntry(ey(lc), ld)) :+ StringEntry(bu(ld), c)) :+ StringEntry(eB(lc), c)) :+ IntegerEntry(by(aI, ld), fj._2)) :+ IntegerEntry(bE(ld), ao)) :+ IntegerEntry(eA(ld, c), ao)) :+ StringEntry(hS, makeString([iv[bn], fj._4, jZ, iv[bq]], ":"))) :+ StringEntry(dz(), makeString(fj._6, "_"))) :+ StringEntry(dA(dB), makeString(fj._10, "_"))) :+ StringEntry(bP(B), makeString([dB, "L", ld], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bv)), ld) | |
2152 | 2171 | } | |
2153 | 2172 | } | |
2154 | 2173 | ||
2155 | 2174 | ||
2156 | - | func | |
2157 | - | ||
2158 | - | ||
2159 | - | func | |
2160 | - | ||
2161 | - | ||
2162 | - | func | |
2163 | - | ||
2164 | - | ||
2165 | - | func | |
2166 | - | ||
2167 | - | ||
2168 | - | func | |
2169 | - | let | |
2170 | - | if ((4 == | |
2171 | - | then | |
2172 | - | else if ((3 == | |
2173 | - | then | |
2174 | - | else if ((5 == | |
2175 | - | then | |
2176 | - | else if ((2 == | |
2177 | - | then | |
2175 | + | func lg (c,kM) = kJ("M", 3, "SSSS", c, kM, 0) | |
2176 | + | ||
2177 | + | ||
2178 | + | func lh (c,kM) = kJ("L", 4, "SMM", c, kM, (cH * 4)) | |
2179 | + | ||
2180 | + | ||
2181 | + | func li (c,kM) = kJ("XL", 5, "SSSML", c, kM, (cH * 47)) | |
2182 | + | ||
2183 | + | ||
2184 | + | func lj (c,kM) = kJ("XXL", 6, "LXL", c, kM, (cH * 54)) | |
2185 | + | ||
2186 | + | ||
2187 | + | func lk (c,kM) = { | |
2188 | + | let cF = size(kM) | |
2189 | + | if ((4 == cF)) | |
2190 | + | then lg(c, kM) | |
2191 | + | else if ((3 == cF)) | |
2192 | + | then lh(c, kM) | |
2193 | + | else if ((5 == cF)) | |
2194 | + | then li(c, kM) | |
2195 | + | else if ((2 == cF)) | |
2196 | + | then lj(c, kM) | |
2178 | 2197 | else throw("Unknown merge") | |
2179 | 2198 | } | |
2180 | 2199 | ||
2181 | 2200 | ||
2182 | - | func | |
2183 | - | let | |
2184 | - | if (isDefined( | |
2201 | + | func ll (bR) = { | |
2202 | + | let lm = getString(bN(bR)) | |
2203 | + | if (isDefined(lm)) | |
2185 | 2204 | then { | |
2186 | - | let B = value( | |
2187 | - | let | |
2188 | - | let | |
2189 | - | let | |
2190 | - | if (if (( | |
2205 | + | let B = value(lm) | |
2206 | + | let ln = bP(B) | |
2207 | + | let cl = split(valueOrElse(getString(ln), aN), "_") | |
2208 | + | let co = parseIntValue(cl[br]) | |
2209 | + | if (if ((cl[bs] != "D")) | |
2191 | 2210 | then true | |
2192 | - | else (( | |
2211 | + | else ((co + aR) > lastBlock.timestamp)) | |
2193 | 2212 | then nil | |
2194 | 2213 | else { | |
2195 | - | let | |
2196 | - | if ((parseIntValue( | |
2214 | + | let kB = A(B) | |
2215 | + | if ((parseIntValue(cl[bt]) > 0)) | |
2197 | 2216 | then { | |
2198 | - | let | |
2199 | - | if (( | |
2217 | + | let kE = invoke(dk, "sendDeliveryReward", [bR], nil) | |
2218 | + | if ((kE == kE)) | |
2200 | 2219 | then nil | |
2201 | 2220 | else throw("Strict value is not equal to itself.") | |
2202 | 2221 | } | |
2203 | 2222 | else ({ | |
2204 | - | let | |
2205 | - | let | |
2206 | - | if (( | |
2207 | - | then if ((0 >= getIntegerValue( | |
2223 | + | let kG = valueOrElse(getInteger(dk, bU), 0) | |
2224 | + | let kH = invoke(dk, "updateDeliveryLocked", [(kG - aQ)], nil) | |
2225 | + | if ((kH == kH)) | |
2226 | + | then if ((0 >= getIntegerValue(kB))) | |
2208 | 2227 | then nil | |
2209 | 2228 | else { | |
2210 | - | let | |
2211 | - | if (( | |
2229 | + | let lo = invoke(this, "saveInteger", [U(B), (co + cJ)], nil) | |
2230 | + | if ((lo == lo)) | |
2212 | 2231 | then nil | |
2213 | 2232 | else throw("Strict value is not equal to itself.") | |
2214 | 2233 | } | |
2215 | 2234 | else throw("Strict value is not equal to itself.") | |
2216 | - | } :+ StringEntry( | |
2235 | + | } :+ StringEntry(ln, getStringValue(L(B)))) | |
2217 | 2236 | } | |
2218 | 2237 | } | |
2219 | 2238 | else nil | |
2220 | 2239 | } | |
2221 | 2240 | ||
2222 | 2241 | ||
2223 | - | func | |
2224 | - | then valueOrElse(getBoolean( | |
2242 | + | func lp (gR) = if (if ((gR.originCaller != dj)) | |
2243 | + | then valueOrElse(getBoolean(dP()), false) | |
2225 | 2244 | else false) | |
2226 | 2245 | then throw("Contracts are under maintenance") | |
2227 | 2246 | else { | |
2228 | - | let | |
2229 | - | ( | |
2247 | + | let bR = toString(gR.originCaller) | |
2248 | + | (ll(bR) :+ StringEntry(dQ(bR), toBase58String(gR.transactionId))) | |
2230 | 2249 | } | |
2231 | 2250 | ||
2232 | 2251 | ||
2233 | - | func | |
2234 | - | then valueOrElse(getBoolean( | |
2252 | + | func lq (gR) = if (if ((gR.originCaller != dj)) | |
2253 | + | then valueOrElse(getBoolean(dP()), false) | |
2235 | 2254 | else false) | |
2236 | 2255 | then throw("Contracts are under maintenance") | |
2237 | - | else [StringEntry( | |
2238 | - | ||
2239 | - | ||
2240 | - | @Callable( | |
2241 | - | func constructorV1 ( | |
2256 | + | else [StringEntry(dQ(toString(gR.originCaller)), toBase58String(gR.transactionId))] | |
2257 | + | ||
2258 | + | ||
2259 | + | @Callable(gR) | |
2260 | + | func constructorV1 (lr) = if ((gR.caller != this)) | |
2242 | 2261 | then throw("Permission denied") | |
2243 | - | else [StringEntry( | |
2244 | - | ||
2245 | - | ||
2246 | - | ||
2247 | - | @Callable( | |
2248 | - | func saveInteger ( | |
2262 | + | else [StringEntry(dd(), lr)] | |
2263 | + | ||
2264 | + | ||
2265 | + | ||
2266 | + | @Callable(gR) | |
2267 | + | func saveInteger (cV,eP) = if ((gR.caller != this)) | |
2249 | 2268 | then throw("saveInteger is not public method") | |
2250 | - | else [IntegerEntry( | |
2251 | - | ||
2252 | - | ||
2253 | - | ||
2254 | - | @Callable( | |
2255 | - | func setBlocked ( | |
2269 | + | else [IntegerEntry(cV, eP)] | |
2270 | + | ||
2271 | + | ||
2272 | + | ||
2273 | + | @Callable(gR) | |
2274 | + | func setBlocked (ls) = if ((gR.caller != this)) | |
2256 | 2275 | then throw("permission denied") | |
2257 | - | else [BooleanEntry( | |
2258 | - | ||
2259 | - | ||
2260 | - | ||
2261 | - | @Callable( | |
2276 | + | else [BooleanEntry(dP(), ls)] | |
2277 | + | ||
2278 | + | ||
2279 | + | ||
2280 | + | @Callable(gR) | |
2262 | 2281 | func stakeLand () = { | |
2263 | - | let | |
2264 | - | if ((size( | |
2282 | + | let lt = lp(gR) | |
2283 | + | if ((size(gR.payments) != 1)) | |
2265 | 2284 | then throw("Exactly one payment required") | |
2266 | 2285 | else { | |
2267 | - | let | |
2268 | - | let | |
2269 | - | let | |
2270 | - | if (( | |
2286 | + | let lu = value(gR.payments[0]) | |
2287 | + | let bv = value(lu.assetId) | |
2288 | + | let cU = toString(gR.caller) | |
2289 | + | if ((lu.amount != 1)) | |
2271 | 2290 | then throw((("NFT " + aF) + " token should be attached as payment")) | |
2272 | 2291 | else { | |
2273 | - | let | |
2274 | - | if (( | |
2292 | + | let jz = value(assetInfo(bv)) | |
2293 | + | if ((jz.issuer != this)) | |
2275 | 2294 | then throw("Unknown issuer of token") | |
2276 | - | else if (!(contains( | |
2295 | + | else if (!(contains(jz.name, aF))) | |
2277 | 2296 | then throw((("Only NFT " + aF) + " tokens are accepted")) | |
2278 | 2297 | else { | |
2279 | - | let | |
2280 | - | let | |
2281 | - | then dropRight( | |
2282 | - | else if (contains( | |
2283 | - | then dropRight( | |
2284 | - | else dropRight( | |
2285 | - | if (!(isDefined(parseInt( | |
2286 | - | then throw(("Cannot parse land number from " + | |
2298 | + | let lv = drop(jz.name, 4) | |
2299 | + | let ez = if (contains(lv, "XXL")) | |
2300 | + | then dropRight(lv, 3) | |
2301 | + | else if (contains(lv, "XL")) | |
2302 | + | then dropRight(lv, 2) | |
2303 | + | else dropRight(lv, 1) | |
2304 | + | if (!(isDefined(parseInt(ez)))) | |
2305 | + | then throw(("Cannot parse land number from " + jz.name)) | |
2287 | 2306 | else { | |
2288 | - | let Q = toBase58String( | |
2289 | - | let | |
2290 | - | if (isDefined(getInteger( | |
2291 | - | then throw((("NFT " + | |
2307 | + | let Q = toBase58String(bv) | |
2308 | + | let jA = bx(Q) | |
2309 | + | if (isDefined(getInteger(jA))) | |
2310 | + | then throw((("NFT " + jz.name) + " is already staked")) | |
2292 | 2311 | else { | |
2293 | - | let | |
2294 | - | let | |
2295 | - | let | |
2296 | - | let | |
2297 | - | let | |
2298 | - | let | |
2299 | - | let | |
2300 | - | let | |
2301 | - | let | |
2302 | - | let | |
2303 | - | let | |
2304 | - | then split_51C(value( | |
2312 | + | let jD = split(jz.description, "_") | |
2313 | + | let gN = gT(jD[dr]) | |
2314 | + | let jp = dM(jD[dq]) | |
2315 | + | let ig = (jp / cN) | |
2316 | + | let fi = gS(gN, ig, 1) | |
2317 | + | let lw = dA(jD[ds]) | |
2318 | + | let lb = split(valueOrElse(getString(lw), "0_0_0_0_0_0"), "_") | |
2319 | + | let lx = makeString(gL(lb, gN, ig, 1), "_") | |
2320 | + | let kX = dC(cU) | |
2321 | + | let kY = getString(kX) | |
2322 | + | let kU = if (isDefined(kY)) | |
2323 | + | then split_51C(value(kY), "_") | |
2305 | 2324 | else nil | |
2306 | - | if (containsElement( | |
2325 | + | if (containsElement(kU, Q)) | |
2307 | 2326 | then throw(("Your staked lands already contain " + Q)) | |
2308 | - | else if ((size( | |
2309 | - | then throw((("Your already staked max (" + toString( | |
2327 | + | else if ((size(kU) >= aK)) | |
2328 | + | then throw((("Your already staked max (" + toString(aK)) + ") lands")) | |
2310 | 2329 | else { | |
2311 | - | let | |
2312 | - | let | |
2313 | - | let | |
2314 | - | let | |
2315 | - | $Tuple2(([IntegerEntry( | |
2330 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
2331 | + | let le = dD(cU) | |
2332 | + | let ly = valueOrElse(getInteger(le), 0) | |
2333 | + | let lz = invoke(dm, "onStakeUnstakeLand", [cU], nil) | |
2334 | + | $Tuple2(([IntegerEntry(jA, lastBlock.timestamp), IntegerEntry(bA(aF, Q, cU), lastBlock.timestamp), StringEntry(kX, makeString_11C((kU :+ Q), "_")), IntegerEntry(le, (ly + jp)), StringEntry(bu(Q), cU), StringEntry(eB(ez), cU), IntegerEntry(eA(Q, cU), ih), StringEntry(dz(), fi), StringEntry(lw, lx)] ++ lt), lz) | |
2316 | 2335 | } | |
2317 | 2336 | } | |
2318 | 2337 | } | |
2323 | 2342 | ||
2324 | 2343 | ||
2325 | 2344 | ||
2326 | - | @Callable( | |
2327 | - | func unstakeLand ( | |
2328 | - | let | |
2329 | - | if ((size( | |
2345 | + | @Callable(gR) | |
2346 | + | func unstakeLand (jv) = { | |
2347 | + | let lt = lp(gR) | |
2348 | + | if ((size(gR.payments) != 0)) | |
2330 | 2349 | then throw("No payments required") | |
2331 | 2350 | else { | |
2332 | - | let c = toString( | |
2333 | - | let | |
2334 | - | let Q = | |
2335 | - | let | |
2336 | - | let | |
2337 | - | let | |
2338 | - | let | |
2339 | - | let | |
2340 | - | let | |
2341 | - | let | |
2342 | - | let | |
2343 | - | let | |
2344 | - | let | |
2345 | - | let | |
2346 | - | let | |
2347 | - | if (!(isDefined( | |
2351 | + | let c = toString(gR.caller) | |
2352 | + | let gh = jt(c, eH, jv) | |
2353 | + | let Q = gh._2 | |
2354 | + | let jD = gh._3 | |
2355 | + | let kX = dC(c) | |
2356 | + | let gN = gT(jD[dr]) | |
2357 | + | let jp = dM(jD[dq]) | |
2358 | + | let ig = (jp / cN) | |
2359 | + | let fi = gS(gN, ig, -1) | |
2360 | + | let lw = dA(jD[ds]) | |
2361 | + | let lb = split(valueOrElse(getString(lw), "0_0_0_0_0_0"), "_") | |
2362 | + | let lx = makeString(gL(lb, gN, ig, -1), "_") | |
2363 | + | let ka = jQ(c, Q, jp, eH) | |
2364 | + | let kU = split_51C(valueOrElse(getString(kX), ""), "_") | |
2365 | + | let di = indexOf(kU, Q) | |
2366 | + | if (!(isDefined(di))) | |
2348 | 2367 | then throw(("Your staked lands don't contain " + Q)) | |
2349 | 2368 | else { | |
2350 | 2369 | let aA = lastBlock.timestamp | |
2351 | - | let | |
2352 | - | if (( | |
2353 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2370 | + | let lA = valueOrElse(getInteger(dl, bQ(c)), 0) | |
2371 | + | if ((lA >= aA)) | |
2372 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lA))) | |
2354 | 2373 | else { | |
2355 | - | let | |
2356 | - | if (( | |
2357 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2374 | + | let lB = (valueOrElse(getInteger(dm, b(c)), 0) + cI) | |
2375 | + | if ((lB > aA)) | |
2376 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lB))) | |
2358 | 2377 | else { | |
2359 | - | let | |
2360 | - | let | |
2361 | - | let | |
2378 | + | let le = dD(c) | |
2379 | + | let lf = valueOrElse(getInteger(le), 0) | |
2380 | + | let lC = if ((jp > lf)) | |
2362 | 2381 | then 0 | |
2363 | - | else ( | |
2364 | - | let | |
2365 | - | $Tuple2(([ScriptTransfer( | |
2366 | - | then StringEntry( | |
2367 | - | else DeleteEntry( | |
2382 | + | else (lf - jp) | |
2383 | + | let lz = invoke(dm, "onStakeUnstakeLand", [c], nil) | |
2384 | + | $Tuple2(([ScriptTransfer(gR.caller, 1, fromBase58String(Q)), DeleteEntry(bx(Q)), DeleteEntry(bA(aF, Q, c)), StringEntry(dz(), fi), StringEntry(lw, lx), StringEntry(ka._2, makeString(ka._3, ":")), if ((size(kU) > 1)) | |
2385 | + | then StringEntry(kX, makeString_11C(removeByIndex(kU, value(di)), "_")) | |
2386 | + | else DeleteEntry(kX), IntegerEntry(le, lC)] ++ lt), lz) | |
2368 | 2387 | } | |
2369 | 2388 | } | |
2370 | 2389 | } | |
2373 | 2392 | ||
2374 | 2393 | ||
2375 | 2394 | ||
2376 | - | @Callable( | |
2395 | + | @Callable(gR) | |
2377 | 2396 | func stakeDuck () = { | |
2378 | - | let | |
2379 | - | if ((size( | |
2397 | + | let lt = lp(gR) | |
2398 | + | if ((size(gR.payments) != 1)) | |
2380 | 2399 | then throw("Exactly one payment required") | |
2381 | 2400 | else { | |
2382 | - | let | |
2383 | - | let | |
2384 | - | let | |
2385 | - | if (( | |
2401 | + | let lu = value(gR.payments[0]) | |
2402 | + | let bv = value(lu.assetId) | |
2403 | + | let cU = toString(gR.caller) | |
2404 | + | if ((lu.amount != 1)) | |
2386 | 2405 | then throw((("NFT " + aG) + " token should be attached as payment")) | |
2387 | 2406 | else { | |
2388 | - | let | |
2389 | - | if (if ( | |
2390 | - | then ( | |
2407 | + | let jz = value(assetInfo(bv)) | |
2408 | + | let lD = if (if (cB) | |
2409 | + | then (jz.issuer == this) | |
2391 | 2410 | else false) | |
2392 | - | then throw((("Unknown issuer of " + aG) + " token")) | |
2393 | - | else if (!(contains(jv.name, aG))) | |
2394 | - | then throw((("Only NFT " + aG) + " tokens are accepted")) | |
2411 | + | then contains(jz.name, aH) | |
2412 | + | else false | |
2413 | + | if (if (if ((jz.issuer != ec)) | |
2414 | + | then (jz.issuer != ed) | |
2415 | + | else false) | |
2416 | + | then !(lD) | |
2417 | + | else false) | |
2418 | + | then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token")) | |
2419 | + | else if (if (!(contains(jz.name, aG))) | |
2420 | + | then !(lD) | |
2421 | + | else false) | |
2422 | + | then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted")) | |
2395 | 2423 | else { | |
2396 | - | let | |
2397 | - | let | |
2398 | - | if (isDefined(getInteger( | |
2399 | - | then throw((("NFT " + | |
2400 | - | else if (isDefined(getString( | |
2401 | - | then throw(("You already staked one duck: " + | |
2424 | + | let lE = toBase58String(bv) | |
2425 | + | let jA = bx(lE) | |
2426 | + | if (isDefined(getInteger(jA))) | |
2427 | + | then throw((("NFT " + jz.name) + " is already staked")) | |
2428 | + | else if (isDefined(getString(bN(cU)))) | |
2429 | + | then throw(("You already staked one duck: " + jz.name)) | |
2402 | 2430 | else { | |
2403 | - | let | |
2404 | - | let | |
2405 | - | let | |
2406 | - | let | |
2407 | - | let | |
2408 | - | let | |
2409 | - | let | |
2410 | - | ([IntegerEntry( | |
2431 | + | let ln = bP(lE) | |
2432 | + | let cj = getString(ln) | |
2433 | + | let hS = bO(lE) | |
2434 | + | let lF = getString(hS) | |
2435 | + | let ji = A(lE) | |
2436 | + | let jj = aj(valueOrElse(getInteger(E(lE)), 0)) | |
2437 | + | let kC = valueOrElse(getInteger(ji), jj) | |
2438 | + | ([IntegerEntry(jA, lastBlock.timestamp), IntegerEntry(bA(aG, toBase58String(bv), cU), lastBlock.timestamp), StringEntry(bM(lE), cU), StringEntry(bN(cU), lE)] ++ (if (isDefined(cj)) | |
2411 | 2439 | then nil | |
2412 | - | else ([StringEntry( | |
2440 | + | else ([StringEntry(ln, aN)] ++ (if (isDefined(lF)) | |
2413 | 2441 | then nil | |
2414 | - | else (([StringEntry( | |
2442 | + | else (([StringEntry(hS, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ji, kC)) ++ lt))))) | |
2415 | 2443 | } | |
2416 | 2444 | } | |
2417 | 2445 | } | |
2420 | 2448 | ||
2421 | 2449 | ||
2422 | 2450 | ||
2423 | - | @Callable( | |
2424 | - | func unstakeDuck ( | |
2425 | - | let | |
2426 | - | if ((size( | |
2451 | + | @Callable(gR) | |
2452 | + | func unstakeDuck (lE) = { | |
2453 | + | let lt = lp(gR) | |
2454 | + | if ((size(gR.payments) != 0)) | |
2427 | 2455 | then throw("No payments required") | |
2428 | 2456 | else { | |
2429 | - | let | |
2430 | - | let | |
2431 | - | let | |
2432 | - | let | |
2433 | - | if (!(isDefined(getInteger( | |
2434 | - | then throw((("NFT " + | |
2435 | - | else if (!(isDefined(getString( | |
2436 | - | then throw((("The duck " + | |
2457 | + | let bv = fromBase58String(lE) | |
2458 | + | let cU = toString(gR.caller) | |
2459 | + | let jz = value(assetInfo(bv)) | |
2460 | + | let jA = bx(lE) | |
2461 | + | if (!(isDefined(getInteger(jA)))) | |
2462 | + | then throw((("NFT " + jz.name) + " is not staked")) | |
2463 | + | else if (!(isDefined(getString(bN(cU))))) | |
2464 | + | then throw((("The duck " + jz.name) + " is not staked")) | |
2437 | 2465 | else { | |
2438 | - | let | |
2439 | - | if (( | |
2466 | + | let jC = valueOrErrorMessage(getString(bM(lE)), (("NFT " + jz.name) + " is orphaned")) | |
2467 | + | if ((jC != cU)) | |
2440 | 2468 | then throw("Staked NFT is not yours") | |
2441 | - | else if ( | |
2469 | + | else if (kx(lE)) | |
2442 | 2470 | then throw("unstakeDuck_checkTournament") | |
2443 | - | else if ( | |
2471 | + | else if (ky(lE)) | |
2444 | 2472 | then throw("unstakeDuck_checkDelivery") | |
2445 | 2473 | else { | |
2446 | - | let | |
2447 | - | let | |
2448 | - | let av = valueOrElse(getInteger( | |
2449 | - | if (( | |
2450 | - | then throw((("Please heal your duck to " + toString( | |
2451 | - | else ([ScriptTransfer( | |
2474 | + | let ji = A(lE) | |
2475 | + | let jj = aj(valueOrElse(getInteger(E(lE)), 0)) | |
2476 | + | let av = valueOrElse(getInteger(ji), jj) | |
2477 | + | if ((jj > av)) | |
2478 | + | then throw((("Please heal your duck to " + toString(jj)) + "hp before unstaking")) | |
2479 | + | else ([ScriptTransfer(gR.caller, 1, bv), DeleteEntry(jA), DeleteEntry(ji), DeleteEntry(bP(lE)), DeleteEntry(bM(lE)), DeleteEntry(bA(aG, lE, cU)), DeleteEntry(bN(cU))] ++ lt) | |
2452 | 2480 | } | |
2453 | 2481 | } | |
2454 | 2482 | } | |
2456 | 2484 | ||
2457 | 2485 | ||
2458 | 2486 | ||
2459 | - | @Callable( | |
2460 | - | func claimRes ( | |
2461 | - | let | |
2462 | - | if ((size( | |
2487 | + | @Callable(gR) | |
2488 | + | func claimRes (eP,lG) = { | |
2489 | + | let lt = lp(gR) | |
2490 | + | if ((size(gR.payments) != 0)) | |
2463 | 2491 | then throw("No payments required") | |
2464 | 2492 | else { | |
2465 | - | let c = toString( | |
2466 | - | let | |
2467 | - | let B = valueOrErrorMessage(getString( | |
2468 | - | $Tuple2((((( | |
2469 | - | } | |
2470 | - | } | |
2471 | - | ||
2472 | - | ||
2473 | - | ||
2474 | - | @Callable( | |
2475 | - | func claimResToWH ( | |
2476 | - | let | |
2477 | - | if ((size( | |
2493 | + | let c = toString(gR.originCaller) | |
2494 | + | let fq = jE(c, eP, eH, lG) | |
2495 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
2496 | + | $Tuple2(((((fq._1 ++ km(B, fraction(X, eP, cM))._1) :+ StringEntry(fq._2, makeString(fq._3, ":"))) :+ StringEntry(fq._4, makeString(fq._5, ":"))) ++ lt), fq._3[bo]) | |
2497 | + | } | |
2498 | + | } | |
2499 | + | ||
2500 | + | ||
2501 | + | ||
2502 | + | @Callable(gR) | |
2503 | + | func claimResToWH (eP,lG) = { | |
2504 | + | let lt = lp(gR) | |
2505 | + | if ((size(gR.payments) != 0)) | |
2478 | 2506 | then throw("No payments required") | |
2479 | 2507 | else { | |
2480 | - | let c = toString( | |
2481 | - | let | |
2482 | - | $Tuple2((((( | |
2483 | - | } | |
2484 | - | } | |
2485 | - | ||
2486 | - | ||
2487 | - | ||
2488 | - | @Callable( | |
2489 | - | func flight ( | |
2490 | - | let | |
2491 | - | if ((size( | |
2508 | + | let c = toString(gR.originCaller) | |
2509 | + | let fq = jE(c, eP, eG, lG) | |
2510 | + | $Tuple2(((((fq._1 ++ kn(c, fraction(X, eP, cM))._1) :+ StringEntry(fq._2, makeString(fq._3, ":"))) :+ StringEntry(fq._4, makeString(fq._5, ":"))) ++ lt), fq._5[bf]) | |
2511 | + | } | |
2512 | + | } | |
2513 | + | ||
2514 | + | ||
2515 | + | ||
2516 | + | @Callable(gR) | |
2517 | + | func flight (iX,iY) = { | |
2518 | + | let lt = lq(gR) | |
2519 | + | if ((size(gR.payments) != 0)) | |
2492 | 2520 | then throw("No payments required") | |
2493 | 2521 | else { | |
2494 | - | let | |
2495 | - | let | |
2496 | - | let | |
2497 | - | let B = | |
2498 | - | let | |
2499 | - | let | |
2500 | - | let | |
2501 | - | if (( | |
2522 | + | let bR = toString(gR.caller) | |
2523 | + | let hw = iW(bR, iX, iY) | |
2524 | + | let jc = hw._1 | |
2525 | + | let B = hw._2 | |
2526 | + | let ln = bP(B) | |
2527 | + | let jx = valueOrElse(getString(ln), aN) | |
2528 | + | let je = hw._4 | |
2529 | + | if ((je == jx)) | |
2502 | 2530 | then throw("You can't fly to the same location") | |
2503 | 2531 | else { | |
2504 | - | let | |
2505 | - | let | |
2506 | - | let | |
2507 | - | let | |
2508 | - | let | |
2509 | - | let | |
2510 | - | let | |
2511 | - | let | |
2512 | - | let | |
2513 | - | then if (!( | |
2514 | - | then | |
2515 | - | else if (( | |
2516 | - | then $Tuple2( | |
2517 | - | else $Tuple2( | |
2518 | - | else if ( | |
2519 | - | then if (!( | |
2532 | + | let cx = split(je, "_") | |
2533 | + | let lH = (cx[bs] == "T") | |
2534 | + | let lI = (cx[bs] == "D") | |
2535 | + | let gE = G(B) | |
2536 | + | let lJ = valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2537 | + | let lK = fr(lJ, hw._5) | |
2538 | + | let lL = lK._1 | |
2539 | + | let lM = lK._2 | |
2540 | + | let lN = if (!(cs(dn, jx))) | |
2541 | + | then if (!(cq(je))) | |
2542 | + | then cv(jx, je, 5) | |
2543 | + | else if ((jc > 0)) | |
2544 | + | then $Tuple2(je, jc) | |
2545 | + | else $Tuple2(jx, 0) | |
2546 | + | else if (ci(dn, jx)) | |
2547 | + | then if (!(ci(dn, je))) | |
2520 | 2548 | then throw("Your duck is taking part in the tournament") | |
2521 | 2549 | else { | |
2522 | - | let | |
2523 | - | let | |
2524 | - | let | |
2525 | - | if (( | |
2526 | - | then | |
2527 | - | else if (( | |
2550 | + | let kA = parseIntValue(cx[bt]) | |
2551 | + | let lO = split(jx, "_") | |
2552 | + | let ck = valueOrElse(getInteger(dn, bV), 0) | |
2553 | + | if ((kA != (parseIntValue(lO[bt]) + 1))) | |
2554 | + | then cv(jx, je, 7) | |
2555 | + | else if ((jc > 0)) | |
2528 | 2556 | then { | |
2529 | - | let | |
2530 | - | let | |
2531 | - | then invoke( | |
2557 | + | let lP = valueOrElse(getInteger(dn, bZ(ck, B)), 0) | |
2558 | + | let lQ = if ((kA > lP)) | |
2559 | + | then invoke(dn, "saveDuckResult", [B, kA], nil) | |
2532 | 2560 | else unit | |
2533 | - | if (( | |
2534 | - | then $Tuple2( | |
2561 | + | if ((lQ == lQ)) | |
2562 | + | then $Tuple2(je, jc) | |
2535 | 2563 | else throw("Strict value is not equal to itself.") | |
2536 | 2564 | } | |
2537 | - | else $Tuple2( | |
2565 | + | else $Tuple2(jx, 0) | |
2538 | 2566 | } | |
2539 | - | else if (!( | |
2567 | + | else if (!(cn(jx))) | |
2540 | 2568 | then { | |
2541 | - | let | |
2569 | + | let lR = dE(invoke(this, "autoExitDelivery", [B, jc, if (lI) | |
2542 | 2570 | then "10" | |
2543 | 2571 | else "11", 0], nil)) | |
2544 | - | if (( | |
2545 | - | then if ( | |
2546 | - | then $Tuple2( | |
2547 | - | else if (( | |
2548 | - | then $Tuple2( | |
2549 | - | else $Tuple2( | |
2572 | + | if ((lR == lR)) | |
2573 | + | then if (lI) | |
2574 | + | then $Tuple2(lR, jc) | |
2575 | + | else if ((jc > 0)) | |
2576 | + | then $Tuple2(je, jc) | |
2577 | + | else $Tuple2(lR, 0) | |
2550 | 2578 | else throw("Strict value is not equal to itself.") | |
2551 | 2579 | } | |
2552 | - | else if (!( | |
2580 | + | else if (!(lI)) | |
2553 | 2581 | then throw("Your duck is taking part in delivery") | |
2554 | - | else if (!( | |
2555 | - | then | |
2582 | + | else if (!(cn(je))) | |
2583 | + | then cv(jx, je, 13) | |
2556 | 2584 | else { | |
2557 | - | let | |
2558 | - | let | |
2559 | - | if (( | |
2560 | - | then | |
2561 | - | else if (if (( | |
2562 | - | then (1 > | |
2585 | + | let kA = parseIntValue(cx[bt]) | |
2586 | + | let lO = split(jx, "_") | |
2587 | + | if ((kA != (parseIntValue(lO[bt]) + 1))) | |
2588 | + | then cv(jx, je, 14) | |
2589 | + | else if (if ((jc > 0)) | |
2590 | + | then (1 > kA) | |
2563 | 2591 | else false) | |
2564 | - | then $Tuple2( | |
2592 | + | then $Tuple2(je, jc) | |
2565 | 2593 | else { | |
2566 | - | let | |
2567 | - | if (( | |
2568 | - | then $Tuple2( | |
2594 | + | let lR = dE(invoke(this, "autoExitDelivery", [B, jc, "15-17", kA], nil)) | |
2595 | + | if ((lR == lR)) | |
2596 | + | then $Tuple2(lR, jc) | |
2569 | 2597 | else throw("Strict value is not equal to itself.") | |
2570 | 2598 | } | |
2571 | 2599 | } | |
2572 | - | let | |
2573 | - | let | |
2574 | - | $Tuple2(((([StringEntry( | |
2600 | + | let lS = lN._1 | |
2601 | + | let lT = lN._2 | |
2602 | + | $Tuple2(((([StringEntry(ln, lS), StringEntry(gE, lL), IntegerEntry(A(B), lT)] ++ lt) ++ (if (lM) | |
2575 | 2603 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2576 | - | else nil)) ++ | |
2604 | + | else nil)) ++ km(B, if ((jc > 0)) | |
2577 | 2605 | then Y | |
2578 | - | else Z)._1), | |
2606 | + | else Z)._1), hw._3) | |
2579 | 2607 | } | |
2580 | 2608 | } | |
2581 | 2609 | } | |
2582 | 2610 | ||
2583 | 2611 | ||
2584 | 2612 | ||
2585 | - | @Callable( | |
2586 | - | func heal ( | |
2587 | - | let | |
2588 | - | if (if (if ((0 > | |
2613 | + | @Callable(gR) | |
2614 | + | func heal (lU,lV,lW) = { | |
2615 | + | let lt = lp(gR) | |
2616 | + | if (if (if ((0 > lU)) | |
2589 | 2617 | then true | |
2590 | - | else (0 > | |
2618 | + | else (0 > lV)) | |
2591 | 2619 | then true | |
2592 | - | else (0 > | |
2620 | + | else (0 > lW)) | |
2593 | 2621 | then throw("Quantity cannot be negative") | |
2594 | 2622 | else { | |
2595 | - | let B = valueOrErrorMessage(getString( | |
2596 | - | if ( | |
2623 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked") | |
2624 | + | if (kx(B)) | |
2597 | 2625 | then throw("heal_checkTournament") | |
2598 | - | else if ( | |
2626 | + | else if (ky(B)) | |
2599 | 2627 | then throw("heal_checkDelivery") | |
2600 | 2628 | else { | |
2601 | - | let | |
2602 | - | let | |
2603 | - | let | |
2604 | - | let | |
2605 | - | if (( | |
2606 | - | then throw((("HP should be < " + toString( | |
2629 | + | let lX = [lU, lV, lW] | |
2630 | + | let ji = A(B) | |
2631 | + | let jj = aj(valueOrElse(getInteger(E(B)), 0)) | |
2632 | + | let lY = valueOrElse(getInteger(ji), jj) | |
2633 | + | if ((lY >= jj)) | |
2634 | + | then throw((("HP should be < " + toString(jj)) + " to heal")) | |
2607 | 2635 | else { | |
2608 | - | let | |
2609 | - | let | |
2610 | - | let | |
2636 | + | let hS = bO(B) | |
2637 | + | let iv = hR(hS) | |
2638 | + | let lZ = if ((iv[bq] == "")) | |
2611 | 2639 | then nil | |
2612 | - | else split_4C( | |
2613 | - | func | |
2614 | - | let | |
2615 | - | let | |
2616 | - | then parseIntValue( | |
2640 | + | else split_4C(iv[bq], "_") | |
2641 | + | func ma (eY,cu) = { | |
2642 | + | let dI = eY._2 | |
2643 | + | let hn = if ((size(lZ) > dI)) | |
2644 | + | then parseIntValue(lZ[dI]) | |
2617 | 2645 | else 0 | |
2618 | - | if ((3 > | |
2646 | + | if ((3 > dI)) | |
2619 | 2647 | then { | |
2620 | - | let | |
2621 | - | if (( | |
2622 | - | then throw(((("You have only " + toString( | |
2623 | - | else $Tuple3(( | |
2648 | + | let mb = lX[dI] | |
2649 | + | if ((mb > hn)) | |
2650 | + | then throw(((("You have only " + toString(hn)) + " of ") + aU[dI])) | |
2651 | + | else $Tuple3((eY._1 :+ toString((hn - mb))), (dI + 1), (eY._3 + (parseIntValue(split(cu, "_")[ba]) * mb))) | |
2624 | 2652 | } | |
2625 | - | else $Tuple3(( | |
2653 | + | else $Tuple3((eY._1 :+ toString(hn)), (dI + 1), eY._3) | |
2626 | 2654 | } | |
2627 | 2655 | ||
2628 | - | let | |
2629 | - | let | |
2630 | - | let | |
2631 | - | let | |
2632 | - | func | |
2633 | - | then | |
2634 | - | else | |
2635 | - | ||
2636 | - | func | |
2637 | - | then | |
2656 | + | let fq = { | |
2657 | + | let fa = aY | |
2658 | + | let fb = size(fa) | |
2659 | + | let fc = $Tuple3(nil, 0, 0) | |
2660 | + | func fd (fe,ff) = if ((ff >= fb)) | |
2661 | + | then fe | |
2662 | + | else ma(fe, fa[ff]) | |
2663 | + | ||
2664 | + | func fg (fe,ff) = if ((ff >= fb)) | |
2665 | + | then fe | |
2638 | 2666 | else throw("List size exceeds 50") | |
2639 | 2667 | ||
2640 | - | fc | |
2668 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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) | |
2641 | 2669 | } | |
2642 | - | let | |
2643 | - | $Tuple2((([IntegerEntry( | |
2670 | + | let mc = min([jj, (lY + fq._3)]) | |
2671 | + | $Tuple2((([IntegerEntry(ji, mc), StringEntry(hS, makeString_2C([iv[bn], iv[bo], iv[bp], makeString(fq._1, "_")], ":"))] ++ lt) ++ km(B, (ag * ((lU + lV) + lW)))._1), mc) | |
2644 | 2672 | } | |
2645 | 2673 | } | |
2646 | 2674 | } | |
2648 | 2676 | ||
2649 | 2677 | ||
2650 | 2678 | ||
2651 | - | @Callable( | |
2679 | + | @Callable(gR) | |
2652 | 2680 | func healES () = { | |
2653 | - | let | |
2654 | - | if ((size( | |
2681 | + | let lt = lp(gR) | |
2682 | + | if ((size(gR.payments) != 1)) | |
2655 | 2683 | then throw("Exactly one payment required") | |
2656 | 2684 | else { | |
2657 | - | let | |
2658 | - | if (( | |
2685 | + | let lu = value(gR.payments[0]) | |
2686 | + | if ((lu.assetId != cE)) | |
2659 | 2687 | then throw("Allowed USDT payment only!") | |
2660 | 2688 | else { | |
2661 | - | let B = valueOrErrorMessage(getString( | |
2662 | - | if ( | |
2689 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked") | |
2690 | + | if (kx(B)) | |
2663 | 2691 | then throw("healES_checkTournament") | |
2664 | - | else if ( | |
2692 | + | else if (ky(B)) | |
2665 | 2693 | then throw("healES_checkDelivery") | |
2666 | 2694 | else { | |
2667 | - | let | |
2668 | - | let | |
2669 | - | let | |
2670 | - | if (( | |
2695 | + | let ji = A(B) | |
2696 | + | let jj = aj(valueOrElse(getInteger(E(B)), 0)) | |
2697 | + | let lY = valueOrElse(getInteger(ji), jj) | |
2698 | + | if ((lY > 0)) | |
2671 | 2699 | then throw("HP should be 0 to call Emergency Service") | |
2672 | 2700 | else { | |
2673 | - | let | |
2674 | - | let | |
2675 | - | let | |
2701 | + | let hS = bO(B) | |
2702 | + | let iv = hR(hS) | |
2703 | + | let lZ = if ((iv[bq] == "")) | |
2676 | 2704 | then nil | |
2677 | - | else split_4C( | |
2678 | - | let | |
2679 | - | then parseIntValue( | |
2705 | + | else split_4C(iv[bq], "_") | |
2706 | + | let md = if ((size(lZ) > 0)) | |
2707 | + | then parseIntValue(lZ[0]) | |
2680 | 2708 | else 0 | |
2681 | - | let | |
2682 | - | then parseIntValue( | |
2709 | + | let me = if ((size(lZ) > 1)) | |
2710 | + | then parseIntValue(lZ[1]) | |
2683 | 2711 | else 0 | |
2684 | - | let | |
2685 | - | then parseIntValue( | |
2712 | + | let mf = if ((size(lZ) > 2)) | |
2713 | + | then parseIntValue(lZ[2]) | |
2686 | 2714 | else 0 | |
2687 | - | if (if (if (( | |
2715 | + | if (if (if ((md > 0)) | |
2688 | 2716 | then true | |
2689 | - | else ( | |
2717 | + | else (me > 0)) | |
2690 | 2718 | then true | |
2691 | - | else ( | |
2719 | + | else (mf > 0)) | |
2692 | 2720 | then throw("You have to use own Medical Kit") | |
2693 | 2721 | else { | |
2694 | - | let | |
2695 | - | let | |
2696 | - | then split_4C(value( | |
2722 | + | let mg = getString(dk, bS()) | |
2723 | + | let mh = if (isDefined(mg)) | |
2724 | + | then split_4C(value(mg), "_") | |
2697 | 2725 | else nil | |
2698 | - | let | |
2699 | - | then parseIntValue( | |
2726 | + | let mi = if ((size(mh) > 0)) | |
2727 | + | then parseIntValue(mh[0]) | |
2700 | 2728 | else 0 | |
2701 | - | if ((0 >= | |
2729 | + | if ((0 >= mi)) | |
2702 | 2730 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2703 | 2731 | else { | |
2704 | - | let | |
2705 | - | let | |
2706 | - | let | |
2707 | - | let | |
2708 | - | let | |
2709 | - | if (( | |
2710 | - | then throw(("Payment attached should be " + toString( | |
2732 | + | let mc = (lY + parseIntValue(split(aY[0], "_")[ba])) | |
2733 | + | let mj = makeString([toString((mi - 1)), removeByIndex(mh, 0)], "_") | |
2734 | + | let cu = split(aY[0], "_") | |
2735 | + | let mk = ct(cu) | |
2736 | + | let ml = fraction((mk * aP), aO, (cM * bd)) | |
2737 | + | if ((lu.amount != ml)) | |
2738 | + | then throw(("Payment attached should be " + toString(ml))) | |
2711 | 2739 | else { | |
2712 | - | let | |
2713 | - | $Tuple2((( | |
2740 | + | let fq = dE(invoke(dk, "updateEsStorage", [mj], [AttachedPayment(cE, ml)])) | |
2741 | + | $Tuple2(((lt :+ IntegerEntry(ji, mc)) ++ km(B, aa)._1), fq) | |
2714 | 2742 | } | |
2715 | 2743 | } | |
2716 | 2744 | } | |
2722 | 2750 | ||
2723 | 2751 | ||
2724 | 2752 | ||
2725 | - | @Callable( | |
2726 | - | func updateBackpack (B, | |
2753 | + | @Callable(gR) | |
2754 | + | func updateBackpack (B,mm) = if ((gR.caller != dk)) | |
2727 | 2755 | then throw("permission denied") | |
2728 | - | else $Tuple2([StringEntry( | |
2729 | - | ||
2730 | - | ||
2731 | - | ||
2732 | - | @Callable( | |
2756 | + | else $Tuple2([StringEntry(bO(B), mm)], mm) | |
2757 | + | ||
2758 | + | ||
2759 | + | ||
2760 | + | @Callable(gR) | |
2733 | 2761 | func commitForRandom () = { | |
2734 | - | let | |
2735 | - | let | |
2736 | - | let c = toString( | |
2737 | - | $Tuple2(([IntegerEntry( | |
2738 | - | } | |
2739 | - | ||
2740 | - | ||
2741 | - | ||
2742 | - | @Callable( | |
2762 | + | let lt = lp(gR) | |
2763 | + | let mn = (height + dx) | |
2764 | + | let c = toString(gR.caller) | |
2765 | + | $Tuple2(([IntegerEntry(dy(c), mn)] ++ lt), mn) | |
2766 | + | } | |
2767 | + | ||
2768 | + | ||
2769 | + | ||
2770 | + | @Callable(gR) | |
2743 | 2771 | func buySLand () = { | |
2744 | - | let | |
2745 | - | if ((size( | |
2772 | + | let lt = lp(gR) | |
2773 | + | if ((size(gR.payments) != 1)) | |
2746 | 2774 | then throw("Exactly one payment required") | |
2747 | 2775 | else { | |
2748 | - | let | |
2749 | - | if (( | |
2776 | + | let lu = value(gR.payments[0]) | |
2777 | + | if ((lu.assetId != cE)) | |
2750 | 2778 | then throw("Allowed USDT payment only!") | |
2751 | - | else if (( | |
2752 | - | then throw(("Payment attached should be " + toString( | |
2779 | + | else if ((lu.amount != el)) | |
2780 | + | then throw(("Payment attached should be " + toString(el))) | |
2753 | 2781 | else { | |
2754 | - | let | |
2755 | - | let | |
2756 | - | $Tuple2(((( | |
2782 | + | let fq = iP(gR.caller, gR.transactionId) | |
2783 | + | let mo = dH(invoke(do, "burnAcres", [en], nil)) | |
2784 | + | $Tuple2((((fq._1 :+ ScriptTransfer(dk, lu.amount, cE)) ++ kn(toString(gR.caller), ac)._1) ++ lt), $Tuple2(fq._2._1, mo)) | |
2757 | 2785 | } | |
2758 | 2786 | } | |
2759 | 2787 | } | |
2760 | 2788 | ||
2761 | 2789 | ||
2762 | 2790 | ||
2763 | - | @Callable( | |
2764 | - | func expedition ( | |
2765 | - | let | |
2766 | - | if ((size( | |
2791 | + | @Callable(gR) | |
2792 | + | func expedition (iX,iY) = { | |
2793 | + | let lt = lp(gR) | |
2794 | + | if ((size(gR.payments) != 0)) | |
2767 | 2795 | then throw("No payments required") | |
2768 | 2796 | else { | |
2769 | - | let | |
2770 | - | let | |
2771 | - | let B = | |
2772 | - | let | |
2773 | - | let | |
2774 | - | let | |
2775 | - | let | |
2776 | - | let | |
2777 | - | let | |
2778 | - | let | |
2779 | - | let | |
2780 | - | let | |
2781 | - | let | |
2782 | - | let | |
2783 | - | let | |
2784 | - | let | |
2785 | - | then $Tuple3([IntegerEntry( | |
2786 | - | else $Tuple3(( | |
2797 | + | let bR = toString(gR.caller) | |
2798 | + | let hw = iW(bR, iX, iY) | |
2799 | + | let B = hw._2 | |
2800 | + | let ji = A(B) | |
2801 | + | let hS = bO(B) | |
2802 | + | let iv = hR(hS) | |
2803 | + | let jX = split(iv[bp], "_") | |
2804 | + | let jZ = makeString(fk(true, jX, ek), "_") | |
2805 | + | let gE = G(B) | |
2806 | + | let lJ = valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2807 | + | let mp = fr(lJ, hw._5) | |
2808 | + | let lL = mp._1 | |
2809 | + | let lM = mp._2 | |
2810 | + | let mq = iP(gR.caller, gR.transactionId) | |
2811 | + | let iV = mq._2._1 | |
2812 | + | let fq = if ((0 >= hw._1)) | |
2813 | + | then $Tuple3([IntegerEntry(ji, 0), StringEntry(gE, lL)], "", 0) | |
2814 | + | else $Tuple3((mq._1 ++ (if (lM) | |
2787 | 2815 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2788 | - | else ((((nil :+ StringEntry( | |
2789 | - | if ( | |
2816 | + | else ((((nil :+ StringEntry(bP(B), makeString([mq._2._2, "L", iV], "_"))) :+ IntegerEntry(ji, hw._1)) :+ StringEntry(gE, lL)) :+ StringEntry(hS, makeString([iv[bn], iv[bo], jZ, iv[bq]], ":"))))), iV, hw._3) | |
2817 | + | if (kx(B)) | |
2790 | 2818 | then throw("expedition_checkTournament") | |
2791 | - | else if ( | |
2819 | + | else if (ky(B)) | |
2792 | 2820 | then throw("expedition_checkDelivery") | |
2793 | 2821 | else { | |
2794 | - | let | |
2795 | - | $Tuple2((( | |
2822 | + | let mo = dH(invoke(do, "burnAcres", [en], nil)) | |
2823 | + | $Tuple2(((fq._1 ++ km(B, ac)._1) ++ lt), $Tuple3(fq._2, fq._3, mo)) | |
2796 | 2824 | } | |
2797 | 2825 | } | |
2798 | 2826 | } | |
2799 | 2827 | ||
2800 | 2828 | ||
2801 | 2829 | ||
2802 | - | @Callable( | |
2830 | + | @Callable(gR) | |
2803 | 2831 | func buySLandForAcres () = { | |
2804 | - | let | |
2805 | - | if ((size( | |
2832 | + | let lt = lp(gR) | |
2833 | + | if ((size(gR.payments) != 1)) | |
2806 | 2834 | then throw("exactly 1 payment must be attached") | |
2807 | 2835 | else { | |
2808 | - | let | |
2809 | - | let | |
2810 | - | if (if (!(isDefined( | |
2836 | + | let lu = gR.payments[0] | |
2837 | + | let fx = lu.amount | |
2838 | + | if (if (!(isDefined(lu.assetId))) | |
2811 | 2839 | then true | |
2812 | - | else (value( | |
2840 | + | else (value(lu.assetId) != dw)) | |
2813 | 2841 | then throw("ACRES payments only!") | |
2814 | - | else if (( | |
2815 | - | then throw(("Payment attached should be " + toString( | |
2842 | + | else if ((fx != en)) | |
2843 | + | then throw(("Payment attached should be " + toString(en))) | |
2816 | 2844 | else { | |
2817 | - | let | |
2818 | - | let | |
2819 | - | $Tuple2((( | |
2845 | + | let fq = iP(gR.caller, gR.transactionId) | |
2846 | + | let mo = dH(invoke(do, "burnAcres", [en], [AttachedPayment(dw, fx)])) | |
2847 | + | $Tuple2(((fq._1 ++ kn(toString(gR.caller), ac)._1) ++ lt), $Tuple2(fq._2._1, mo)) | |
2820 | 2848 | } | |
2821 | 2849 | } | |
2822 | 2850 | } | |
2823 | 2851 | ||
2824 | 2852 | ||
2825 | 2853 | ||
2826 | - | @Callable( | |
2854 | + | @Callable(gR) | |
2827 | 2855 | func upgradeInfra (Q) = { | |
2828 | - | let | |
2829 | - | if ((size( | |
2856 | + | let lt = lp(gR) | |
2857 | + | if ((size(gR.payments) != 0)) | |
2830 | 2858 | then throw("No payments required") | |
2831 | 2859 | else { | |
2832 | - | let | |
2833 | - | let B = valueOrErrorMessage(getString( | |
2834 | - | $Tuple2((( | |
2835 | - | } | |
2836 | - | } | |
2837 | - | ||
2838 | - | ||
2839 | - | ||
2840 | - | @Callable( | |
2841 | - | func activateArtifact ( | |
2842 | - | let | |
2843 | - | if ((size( | |
2860 | + | let fq = jR(true, gR.caller, 0, Q) | |
2861 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked") | |
2862 | + | $Tuple2(((fq._1 ++ lt) ++ km(B, fraction(ad, fq._3, cM))._1), fq._2) | |
2863 | + | } | |
2864 | + | } | |
2865 | + | ||
2866 | + | ||
2867 | + | ||
2868 | + | @Callable(gR) | |
2869 | + | func activateArtifact (mr,ms) = { | |
2870 | + | let lt = lp(gR) | |
2871 | + | if ((size(gR.payments) != 0)) | |
2844 | 2872 | then throw("No payments required") | |
2845 | 2873 | else { | |
2846 | - | let c = toString( | |
2847 | - | let | |
2848 | - | let | |
2849 | - | if (("PRESALE" == | |
2850 | - | then | |
2851 | - | else if (("ONBOARD" == | |
2852 | - | then | |
2874 | + | let c = toString(gR.caller) | |
2875 | + | let fq = { | |
2876 | + | let cF = mr | |
2877 | + | if (("PRESALE" == cF)) | |
2878 | + | then kv(c, ms) | |
2879 | + | else if (("ONBOARD" == cF)) | |
2880 | + | then ko(c) | |
2853 | 2881 | else throw("Unknown artifact") | |
2854 | 2882 | } | |
2855 | - | ( | |
2856 | - | } | |
2857 | - | } | |
2858 | - | ||
2859 | - | ||
2860 | - | ||
2861 | - | @Callable( | |
2862 | - | func mergeLands ( | |
2863 | - | let | |
2864 | - | if ((size( | |
2883 | + | (fq ++ lt) | |
2884 | + | } | |
2885 | + | } | |
2886 | + | ||
2887 | + | ||
2888 | + | ||
2889 | + | @Callable(gR) | |
2890 | + | func mergeLands (kM) = { | |
2891 | + | let lt = lp(gR) | |
2892 | + | if ((size(gR.payments) != 0)) | |
2865 | 2893 | then throw("No payments required") | |
2866 | 2894 | else { | |
2867 | - | let | |
2868 | - | $Tuple2((( | |
2869 | - | } | |
2870 | - | } | |
2871 | - | ||
2872 | - | ||
2873 | - | ||
2874 | - | @Callable( | |
2875 | - | func cargoExchange ( | |
2876 | - | let | |
2877 | - | if ((size( | |
2895 | + | let fq = lk(toString(gR.caller), kM) | |
2896 | + | $Tuple2(((fq._1 ++ lt) ++ kn(toString(gR.caller), ae)._1), fq._2) | |
2897 | + | } | |
2898 | + | } | |
2899 | + | ||
2900 | + | ||
2901 | + | ||
2902 | + | @Callable(gR) | |
2903 | + | func cargoExchange (mt,Q) = { | |
2904 | + | let lt = lp(gR) | |
2905 | + | if ((size(gR.payments) != 0)) | |
2878 | 2906 | then throw("No payments required") | |
2879 | 2907 | else { | |
2880 | - | let | |
2881 | - | let c = toString( | |
2882 | - | let | |
2883 | - | let | |
2884 | - | if (!(isDefined(getInteger( | |
2885 | - | then throw(( | |
2908 | + | let iu = split_4C(mt, ":") | |
2909 | + | let c = toString(gR.originCaller) | |
2910 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
2911 | + | let jA = bx(Q) | |
2912 | + | if (!(isDefined(getInteger(jA)))) | |
2913 | + | then throw((jz.name + " is not staked")) | |
2886 | 2914 | else { | |
2887 | - | let | |
2888 | - | if (( | |
2915 | + | let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned")) | |
2916 | + | if ((jC != c)) | |
2889 | 2917 | then throw((aF + " is not yours")) | |
2890 | 2918 | else { | |
2891 | - | let | |
2892 | - | let | |
2893 | - | let B = valueOrErrorMessage(getString( | |
2894 | - | let | |
2895 | - | let | |
2896 | - | if (( | |
2897 | - | then throw((("Duck location type is " + | |
2898 | - | else if (( | |
2919 | + | let ig = (dM(split(jz.description, "_")[dq]) / cN) | |
2920 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
2921 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
2922 | + | let jx = valueOrElse(getString(bP(B)), aN) | |
2923 | + | let cl = split(value(jx), "_") | |
2924 | + | if ((cl[bs] != "L")) | |
2925 | + | then throw((("Duck location type is " + cl[bs]) + ", but should be L")) | |
2926 | + | else if ((cl[bt] != Q)) | |
2899 | 2927 | then throw(("Duck should be on the land " + Q)) | |
2900 | 2928 | else { | |
2901 | - | let | |
2902 | - | let | |
2903 | - | let | |
2904 | - | let | |
2905 | - | let | |
2906 | - | let | |
2907 | - | let | |
2908 | - | let | |
2909 | - | ([StringEntry( | |
2929 | + | let if = bD(Q) | |
2930 | + | let hW = ie(if, ig, ih) | |
2931 | + | let hS = bO(B) | |
2932 | + | let iv = hR(hS) | |
2933 | + | let fq = it(iu, hW, iv) | |
2934 | + | let in = split(hW[bi], "_") | |
2935 | + | let jO = (parseIntValue(in[bk]) + fq._7) | |
2936 | + | let jP = (parseIntValue(in[bl]) - fq._7) | |
2937 | + | ([StringEntry(hS, makeString_2C([iv[bn], fq._4, fq._5, fq._6], ":")), StringEntry(if, makeString_2C([hW[be], fq._1, fq._2, fq._3, makeString([in[bj], toString(jO), toString(jP), in[bm]], "_")], ":"))] ++ lt) | |
2910 | 2938 | } | |
2911 | 2939 | } | |
2912 | 2940 | } | |
2915 | 2943 | ||
2916 | 2944 | ||
2917 | 2945 | ||
2918 | - | @Callable( | |
2919 | - | func saveWarehouse ( | |
2946 | + | @Callable(gR) | |
2947 | + | func saveWarehouse (ij,Q) = if ((gR.caller != dk)) | |
2920 | 2948 | then throw("Access denied") | |
2921 | 2949 | else { | |
2922 | - | let | |
2923 | - | let | |
2924 | - | if ((size( | |
2950 | + | let if = bD(Q) | |
2951 | + | let ik = split_4C(ij, ":") | |
2952 | + | if ((size(ik) != 5)) | |
2925 | 2953 | then throw("warehouse string should contain 4 ':' separators") | |
2926 | 2954 | else { | |
2927 | - | let | |
2928 | - | let | |
2929 | - | let | |
2930 | - | let | |
2931 | - | if ((0 > | |
2955 | + | let mu = split(ik[bi], "_")[bj] | |
2956 | + | let jO = hV(ik) | |
2957 | + | let mv = hT(ik[be]) | |
2958 | + | let jP = ((mv - parseIntValue(mu)) - jO) | |
2959 | + | if ((0 > jP)) | |
2932 | 2960 | then throw("Operation leads to negative free warehouse space") | |
2933 | 2961 | else { | |
2934 | - | let | |
2935 | - | $Tuple2([StringEntry( | |
2962 | + | let mw = makeString_2C([ik[be], ik[bf], ik[bg], ik[bh], makeString([mu, toString(jO), toString(jP), toString(mv)], "_")], ":") | |
2963 | + | $Tuple2([StringEntry(if, mw)], mw) | |
2936 | 2964 | } | |
2937 | 2965 | } | |
2938 | 2966 | } | |
2939 | 2967 | ||
2940 | 2968 | ||
2941 | 2969 | ||
2942 | - | @Callable( | |
2943 | - | func setCustomName ( | |
2944 | - | let | |
2945 | - | if ((size( | |
2970 | + | @Callable(gR) | |
2971 | + | func setCustomName (bv,kW,bz) = { | |
2972 | + | let lt = lp(gR) | |
2973 | + | if ((size(gR.payments) != 1)) | |
2946 | 2974 | then throw("Exactly one payment required") | |
2947 | 2975 | else { | |
2948 | - | let | |
2949 | - | if (( | |
2976 | + | let lu = value(gR.payments[0]) | |
2977 | + | if ((lu.assetId != cE)) | |
2950 | 2978 | then throw("Allowed USDT payment only!") | |
2951 | - | else if (( | |
2952 | - | then throw(("Payment should be " + toString( | |
2953 | - | else if (contains( | |
2954 | - | then throw(("Name should not contain '__': " + | |
2955 | - | else if ((size( | |
2956 | - | then throw(("Name too long, maxLength=" + toString( | |
2979 | + | else if ((lu.amount != eh)) | |
2980 | + | then throw(("Payment should be " + toString(eh))) | |
2981 | + | else if (contains(kW, "__")) | |
2982 | + | then throw(("Name should not contain '__': " + kW)) | |
2983 | + | else if ((size(kW) > ei)) | |
2984 | + | then throw(("Name too long, maxLength=" + toString(ei))) | |
2957 | 2985 | else { | |
2958 | - | let c = toString( | |
2959 | - | let | |
2960 | - | let | |
2961 | - | if (("ACCOUNT" == | |
2986 | + | let c = toString(gR.originCaller) | |
2987 | + | let mx = { | |
2988 | + | let cF = bz | |
2989 | + | if (("ACCOUNT" == cF)) | |
2962 | 2990 | then { | |
2963 | - | let | |
2964 | - | let | |
2965 | - | if (isDefined( | |
2966 | - | then throw(("Name already registered: " + | |
2991 | + | let my = eD(kW) | |
2992 | + | let mz = getString(my) | |
2993 | + | if (isDefined(mz)) | |
2994 | + | then throw(("Name already registered: " + kW)) | |
2967 | 2995 | else { | |
2968 | - | let | |
2969 | - | let | |
2970 | - | let | |
2971 | - | then [DeleteEntry( | |
2996 | + | let mA = bH(c) | |
2997 | + | let mB = getString(mA) | |
2998 | + | let mC = if (isDefined(mB)) | |
2999 | + | then [DeleteEntry(eD(value(mB)))] | |
2972 | 3000 | else nil | |
2973 | - | ((( | |
3001 | + | (((mC :+ StringEntry(mA, kW)) :+ StringEntry(my, c)) ++ kn(c, ab)._1) | |
2974 | 3002 | } | |
2975 | 3003 | } | |
2976 | - | else if (("LAND" == | |
3004 | + | else if (("LAND" == cF)) | |
2977 | 3005 | then { | |
2978 | - | let | |
2979 | - | let | |
2980 | - | if (!(isDefined(getInteger( | |
2981 | - | then throw(( | |
3006 | + | let jz = value(assetInfo(fromBase58String(bv))) | |
3007 | + | let jA = bx(bv) | |
3008 | + | if (!(isDefined(getInteger(jA)))) | |
3009 | + | then throw((jz.name + " is not staked")) | |
2982 | 3010 | else { | |
2983 | - | let | |
2984 | - | if (( | |
3011 | + | let jC = valueOrErrorMessage(getString(bu(bv)), (("NFT " + jz.name) + " is orphaned")) | |
3012 | + | if ((jC != c)) | |
2985 | 3013 | then throw((aF + " is not yours")) | |
2986 | 3014 | else { | |
2987 | - | let | |
2988 | - | let | |
2989 | - | if (isDefined( | |
2990 | - | then throw(("Name already registered: " + | |
3015 | + | let my = ew(kW) | |
3016 | + | let mz = getString(my) | |
3017 | + | if (isDefined(mz)) | |
3018 | + | then throw(("Name already registered: " + kW)) | |
2991 | 3019 | else { | |
2992 | - | let | |
2993 | - | let | |
2994 | - | let | |
2995 | - | then [DeleteEntry( | |
3020 | + | let mD = bw(bv) | |
3021 | + | let mB = getString(mD) | |
3022 | + | let mC = if (isDefined(mB)) | |
3023 | + | then [DeleteEntry(ew(value(mB)))] | |
2996 | 3024 | else nil | |
2997 | - | ((( | |
3025 | + | (((mC :+ StringEntry(mD, kW)) :+ StringEntry(my, bv)) ++ kn(c, ab)._1) | |
2998 | 3026 | } | |
2999 | 3027 | } | |
3000 | 3028 | } | |
3001 | 3029 | } | |
3002 | - | else if (("DUCK" == | |
3030 | + | else if (("DUCK" == cF)) | |
3003 | 3031 | then { | |
3004 | - | let | |
3005 | - | let | |
3006 | - | if (if (!(isDefined(getInteger( | |
3032 | + | let jz = value(assetInfo(fromBase58String(bv))) | |
3033 | + | let jA = bx(bv) | |
3034 | + | if (if (!(isDefined(getInteger(jA)))) | |
3007 | 3035 | then true | |
3008 | - | else !(isDefined(getString( | |
3009 | - | then throw(( | |
3036 | + | else !(isDefined(getString(bN(c))))) | |
3037 | + | then throw((jz.name + " is not staked")) | |
3010 | 3038 | else { | |
3011 | - | let | |
3012 | - | if (( | |
3039 | + | let jC = valueOrErrorMessage(getString(bM(bv)), (("NFT " + jz.name) + " is orphaned")) | |
3040 | + | if ((jC != c)) | |
3013 | 3041 | then throw((aG + " is not yours")) | |
3014 | 3042 | else { | |
3015 | - | let | |
3016 | - | let | |
3017 | - | if (isDefined( | |
3018 | - | then throw(("Name already registered: " + | |
3043 | + | let my = eC(kW) | |
3044 | + | let mz = getString(my) | |
3045 | + | if (isDefined(mz)) | |
3046 | + | then throw(("Name already registered: " + kW)) | |
3019 | 3047 | else { | |
3020 | - | let | |
3021 | - | let | |
3022 | - | let | |
3023 | - | then [DeleteEntry( | |
3048 | + | let mD = bG(bv) | |
3049 | + | let mB = getString(mD) | |
3050 | + | let mC = if (isDefined(mB)) | |
3051 | + | then [DeleteEntry(eC(value(mB)))] | |
3024 | 3052 | else nil | |
3025 | - | ((( | |
3053 | + | (((mC :+ StringEntry(mD, kW)) :+ StringEntry(my, bv)) ++ km(bv, ab)._1) | |
3026 | 3054 | } | |
3027 | 3055 | } | |
3028 | 3056 | } | |
3029 | 3057 | } | |
3030 | 3058 | else throw("Unknown entity type") | |
3031 | 3059 | } | |
3032 | - | $Tuple2((( | |
3060 | + | $Tuple2(((mx :+ ScriptTransfer(dk, lu.amount, cE)) ++ lt), 0) | |
3033 | 3061 | } | |
3034 | 3062 | } | |
3035 | 3063 | } | |
3036 | 3064 | ||
3037 | 3065 | ||
3038 | 3066 | ||
3039 | - | @Callable( | |
3040 | - | func setReferrals ( | |
3067 | + | @Callable(gR) | |
3068 | + | func setReferrals (mE,mF) = if ((gR.callerPublicKey != ee)) | |
3041 | 3069 | then throw("Permission denied") | |
3042 | 3070 | else { | |
3043 | - | let | |
3044 | - | if ((size( | |
3071 | + | let lt = lp(gR) | |
3072 | + | if ((size(gR.payments) != 0)) | |
3045 | 3073 | then throw("No payments required") | |
3046 | - | else if (!(isDefined(addressFromString( | |
3047 | - | then throw(("Invalid address: " + | |
3048 | - | else if (!(isDefined(addressFromString( | |
3049 | - | then throw(("Invalid address: " + | |
3074 | + | else if (!(isDefined(addressFromString(mE)))) | |
3075 | + | then throw(("Invalid address: " + mE)) | |
3076 | + | else if (!(isDefined(addressFromString(mF)))) | |
3077 | + | then throw(("Invalid address: " + mF)) | |
3050 | 3078 | else { | |
3051 | - | let | |
3052 | - | let | |
3053 | - | let | |
3054 | - | then split_4C(value( | |
3079 | + | let mG = eE() | |
3080 | + | let mH = getString(mG) | |
3081 | + | let mI = if (isDefined(mH)) | |
3082 | + | then split_4C(value(mH), "_") | |
3055 | 3083 | else nil | |
3056 | - | if (containsElement( | |
3057 | - | then throw(( | |
3084 | + | if (containsElement(mI, mF)) | |
3085 | + | then throw((mF + " is not newbie (already has referrals)")) | |
3058 | 3086 | else { | |
3059 | - | let | |
3060 | - | let | |
3061 | - | if (if (isDefined( | |
3062 | - | then isDefined(addressFromString(value( | |
3087 | + | let kp = bI(mF) | |
3088 | + | let kq = getString(kp) | |
3089 | + | if (if (isDefined(kq)) | |
3090 | + | then isDefined(addressFromString(value(kq))) | |
3063 | 3091 | else false) | |
3064 | - | then throw((( | |
3092 | + | then throw(((mF + " already has refBy: ") + value(kq))) | |
3065 | 3093 | else { | |
3066 | - | let | |
3067 | - | let | |
3068 | - | let | |
3069 | - | then split_4C(value( | |
3094 | + | let mJ = bL(mE) | |
3095 | + | let mK = getString(mJ) | |
3096 | + | let mL = if (isDefined(mK)) | |
3097 | + | then split_4C(value(mK), "_") | |
3070 | 3098 | else nil | |
3071 | - | if (containsElement( | |
3072 | - | then throw(((( | |
3099 | + | if (containsElement(mL, mF)) | |
3100 | + | then throw((((mE + " already contains ") + mF) + " within referrals")) | |
3073 | 3101 | else { | |
3074 | - | let | |
3075 | - | let | |
3076 | - | then value( | |
3077 | - | else makeString_2C(( | |
3078 | - | $Tuple2(([StringEntry( | |
3102 | + | let mM = makeString_2C((mL :+ mF), "_") | |
3103 | + | let mN = if (containsElement(mI, mE)) | |
3104 | + | then value(mH) | |
3105 | + | else makeString_2C((mI :+ mE), "_") | |
3106 | + | $Tuple2(([StringEntry(kp, mE), StringEntry(mJ, mM), StringEntry(mG, mN)] ++ lt), 0) | |
3079 | 3107 | } | |
3080 | 3108 | } | |
3081 | 3109 | } | |
3084 | 3112 | ||
3085 | 3113 | ||
3086 | 3114 | ||
3087 | - | @Callable( | |
3088 | - | func distributePoints ( | |
3089 | - | let | |
3090 | - | if ((size( | |
3115 | + | @Callable(gR) | |
3116 | + | func distributePoints (mO,mP,mQ,mR,mS) = { | |
3117 | + | let lt = lp(gR) | |
3118 | + | if ((size(gR.payments) != 0)) | |
3091 | 3119 | then throw("No payments required") | |
3092 | 3120 | else { | |
3093 | - | let c = toString( | |
3094 | - | let | |
3095 | - | let | |
3096 | - | let | |
3121 | + | let c = toString(gR.originCaller) | |
3122 | + | let mT = dJ(invoke(dm, "checkWlgXpREADONLY", [c], nil)) | |
3123 | + | let mU = dH(mT[1]) | |
3124 | + | let mV = if ((0 >= mU)) | |
3097 | 3125 | then $Tuple2(0, nil) | |
3098 | 3126 | else { | |
3099 | - | let | |
3100 | - | if (( | |
3101 | - | then $Tuple2( | |
3127 | + | let kk = dH(invoke(dm, "takeWlgXp", [c], nil)) | |
3128 | + | if ((kk == kk)) | |
3129 | + | then $Tuple2(mU, [IntegerEntry(I(c), dH(mT[0])), IntegerEntry(H(c), dH(mT[2]))]) | |
3102 | 3130 | else throw("Strict value is not equal to itself.") | |
3103 | 3131 | } | |
3104 | - | let | |
3105 | - | let | |
3106 | - | let B = valueOrErrorMessage(getString( | |
3107 | - | let | |
3108 | - | let | |
3109 | - | let | |
3110 | - | let | |
3111 | - | let | |
3112 | - | let | |
3113 | - | if (( | |
3114 | - | then throw((("There are only " + toString( | |
3132 | + | let mW = mV._1 | |
3133 | + | let mX = mV._2 | |
3134 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
3135 | + | let mY = J(c) | |
3136 | + | let mZ = (valueOrElse(getInteger(mY), 0) + mW) | |
3137 | + | let na = F(B) | |
3138 | + | let nb = valueOrElse(getInteger(na), 0) | |
3139 | + | let nc = (mZ + nb) | |
3140 | + | let nd = ((((mO + mP) + mQ) + mR) + mS) | |
3141 | + | if ((nd > nc)) | |
3142 | + | then throw((("There are only " + toString(nc)) + " free points to distribute")) | |
3115 | 3143 | else { | |
3116 | - | let | |
3117 | - | let at = split(valueOrElse(getString( | |
3118 | - | let | |
3119 | - | $Tuple2((([IntegerEntry( | |
3144 | + | let ne = C(B) | |
3145 | + | let at = split(valueOrElse(getString(ne), "0_0_0_0_0"), "_") | |
3146 | + | let nf = (mZ - nd) | |
3147 | + | $Tuple2((([IntegerEntry(mY, if ((0 > nf)) | |
3120 | 3148 | then 0 | |
3121 | - | else | |
3122 | - | then ( | |
3123 | - | else | |
3149 | + | else nf), IntegerEntry(na, if ((0 > nf)) | |
3150 | + | then (nb + nf) | |
3151 | + | else nb), StringEntry(ne, makeString([toString((parseIntValue(at[l]) + mO)), toString((parseIntValue(at[m]) + mP)), toString((parseIntValue(at[n]) + mQ)), toString((parseIntValue(at[o]) + mR)), toString((parseIntValue(at[p]) + mS))], "_"))] ++ lt) ++ mX), 0) | |
3124 | 3152 | } | |
3125 | 3153 | } | |
3126 | 3154 | } | |
3127 | 3155 | ||
3128 | 3156 | ||
3129 | 3157 | ||
3130 | - | @Callable( | |
3131 | - | func splitByGlobalWeightsREADONLY ( | |
3132 | - | ||
3133 | - | ||
3134 | - | ||
3135 | - | @Callable( | |
3136 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
3137 | - | let | |
3138 | - | $Tuple2(nil, $Tuple2( | |
3139 | - | } | |
3140 | - | ||
3141 | - | ||
3142 | - | ||
3143 | - | @Callable( | |
3144 | - | func getBackpackREADONLY (B) = $Tuple2(nil, makeString( | |
3145 | - | ||
3146 | - | ||
3147 | - | ||
3148 | - | @Callable( | |
3158 | + | @Callable(gR) | |
3159 | + | func splitByGlobalWeightsREADONLY (eP) = $Tuple2(nil, fh(eP)) | |
3160 | + | ||
3161 | + | ||
3162 | + | ||
3163 | + | @Callable(gR) | |
3164 | + | func splitByGlobalAndLocalWeightsREADONLY (ng,nh,gU) = { | |
3165 | + | let gN = gT(gU) | |
3166 | + | $Tuple2(nil, $Tuple2(fh(ng), eS(nh, gN))) | |
3167 | + | } | |
3168 | + | ||
3169 | + | ||
3170 | + | ||
3171 | + | @Callable(gR) | |
3172 | + | func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hR(bO(B)), ":")) | |
3173 | + | ||
3174 | + | ||
3175 | + | ||
3176 | + | @Callable(gR) | |
3149 | 3177 | func getWarehouseREADONLY (Q) = { | |
3150 | - | let | |
3151 | - | let | |
3152 | - | let | |
3153 | - | $Tuple2(nil, makeString_2C( | |
3154 | - | } | |
3155 | - | ||
3156 | - | ||
3157 | - | ||
3158 | - | @Callable( | |
3159 | - | func saveLastTx () = if (!(containsElement([dk, | |
3178 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
3179 | + | let ig = (dM(split(jz.description, "_")[dq]) / cN) | |
3180 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
3181 | + | $Tuple2(nil, makeString_2C(ie(bD(Q), ig, ih), ":")) | |
3182 | + | } | |
3183 | + | ||
3184 | + | ||
3185 | + | ||
3186 | + | @Callable(gR) | |
3187 | + | func saveLastTx () = if (!(containsElement([dm, dk, dn, do], gR.caller))) | |
3160 | 3188 | then throw("Access denied") | |
3161 | - | else $Tuple2( | |
3162 | - | ||
3163 | - | ||
3164 | - | ||
3165 | - | @Callable( | |
3166 | - | func updateDuckStats (B, | |
3189 | + | else $Tuple2(lp(gR), 42) | |
3190 | + | ||
3191 | + | ||
3192 | + | ||
3193 | + | @Callable(gR) | |
3194 | + | func updateDuckStats (B,kk) = if ((gR.caller != dk)) | |
3167 | 3195 | then throw("Access denied") | |
3168 | - | else | |
3169 | - | ||
3170 | - | ||
3171 | - | ||
3172 | - | @Callable( | |
3173 | - | func updateAccStats (c, | |
3196 | + | else km(B, kk) | |
3197 | + | ||
3198 | + | ||
3199 | + | ||
3200 | + | @Callable(gR) | |
3201 | + | func updateAccStats (c,kk) = if (!(containsElement([dm, dk, do], gR.caller))) | |
3174 | 3202 | then throw("Access denied") | |
3175 | - | else | |
3176 | - | ||
3177 | - | ||
3178 | - | ||
3179 | - | @Callable( | |
3180 | - | func equipDuck ( | |
3181 | - | let | |
3182 | - | if ((size( | |
3203 | + | else kn(c, kk) | |
3204 | + | ||
3205 | + | ||
3206 | + | ||
3207 | + | @Callable(gR) | |
3208 | + | func equipDuck (ni) = { | |
3209 | + | let lt = lp(gR) | |
3210 | + | if ((size(gR.payments) != 0)) | |
3183 | 3211 | then throw("No payments required") | |
3184 | 3212 | else { | |
3185 | - | let c = toString( | |
3186 | - | let B = valueOrErrorMessage(getString( | |
3187 | - | if ( | |
3213 | + | let c = toString(gR.originCaller) | |
3214 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
3215 | + | if (kx(B)) | |
3188 | 3216 | then throw("equipDuck_checkTournament") | |
3189 | - | else if ( | |
3217 | + | else if (ky(B)) | |
3190 | 3218 | then throw("equipDuck_checkDelivery") | |
3191 | 3219 | else { | |
3192 | - | let | |
3193 | - | let | |
3194 | - | let | |
3195 | - | let | |
3196 | - | let | |
3197 | - | if ((size( | |
3220 | + | let gE = G(B) | |
3221 | + | let nj = split(valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3222 | + | let hS = bO(B) | |
3223 | + | let iv = hR(hS) | |
3224 | + | let lL = split(ni, "_") | |
3225 | + | if ((size(lL) != r)) | |
3198 | 3226 | then throw("Wrong equipment string") | |
3199 | 3227 | else { | |
3200 | - | let | |
3201 | - | let | |
3202 | - | let ar = if (( | |
3228 | + | let gG = gt(nj, fE(iv[bq]), true, nil) | |
3229 | + | let gH = split(lL[q], ";")[1] | |
3230 | + | let ar = if ((gH == "")) | |
3203 | 3231 | then 0 | |
3204 | 3232 | else { | |
3205 | - | let | |
3206 | - | if (( | |
3233 | + | let gI = split(gH, ",")[0] | |
3234 | + | if ((gI == "")) | |
3207 | 3235 | then 0 | |
3208 | 3236 | else { | |
3209 | - | let | |
3210 | - | let | |
3211 | - | let | |
3212 | - | if (if (if (if (if (( | |
3237 | + | let fT = split(gI, ":") | |
3238 | + | let di = fT[0] | |
3239 | + | let gJ = fT[1] | |
3240 | + | if (if (if (if (if ((di == "06")) | |
3213 | 3241 | then true | |
3214 | - | else ( | |
3242 | + | else (di == "07")) | |
3215 | 3243 | then true | |
3216 | - | else ( | |
3217 | - | then ( | |
3244 | + | else (di == "08")) | |
3245 | + | then (gJ != "") | |
3218 | 3246 | else false) | |
3219 | - | then (parseIntValue( | |
3247 | + | then (parseIntValue(gJ) > 0) | |
3220 | 3248 | else false) | |
3221 | - | then parseIntValue(split( | |
3249 | + | then parseIntValue(split(aY[parseIntValue(di)], "_")[ba]) | |
3222 | 3250 | else 0 | |
3223 | 3251 | } | |
3224 | 3252 | } | |
3225 | - | let | |
3226 | - | let | |
3227 | - | let | |
3228 | - | $Tuple2(([StringEntry( | |
3253 | + | let go = ap(this, B, ar, true) | |
3254 | + | let gK = gt(lL, gG, false, go) | |
3255 | + | let nk = fJ(gK) | |
3256 | + | $Tuple2(([StringEntry(gE, ni), StringEntry(hS, makeString_2C([iv[bn], iv[bo], iv[bp], nk], ":")), StringEntry(M(B), makeString([toString(go[7]), toString(go[8]), toString(go[9]), toString(go[10]), toString(go[11])], "_"))] ++ lt), 0) | |
3229 | 3257 | } | |
3230 | 3258 | } | |
3231 | 3259 | } | |
3233 | 3261 | ||
3234 | 3262 | ||
3235 | 3263 | ||
3236 | - | @Callable( | |
3237 | - | func fortificateLand (Q, | |
3238 | - | let | |
3239 | - | if ((size( | |
3264 | + | @Callable(gR) | |
3265 | + | func fortificateLand (Q,nl) = { | |
3266 | + | let lt = lp(gR) | |
3267 | + | if ((size(gR.payments) != 0)) | |
3240 | 3268 | then throw("No payments required") | |
3241 | 3269 | else { | |
3242 | - | let c = toString( | |
3243 | - | let B = valueOrElse(getString( | |
3244 | - | let | |
3245 | - | let | |
3246 | - | let | |
3247 | - | let | |
3248 | - | let | |
3249 | - | let | |
3250 | - | let | |
3251 | - | let | |
3252 | - | let | |
3253 | - | let | |
3254 | - | let | |
3255 | - | let | |
3256 | - | let | |
3257 | - | let | |
3258 | - | let | |
3259 | - | let | |
3260 | - | let | |
3261 | - | let | |
3262 | - | let | |
3263 | - | let | |
3264 | - | let | |
3265 | - | let | |
3266 | - | $Tuple2(([StringEntry( | |
3267 | - | } | |
3268 | - | } | |
3269 | - | ||
3270 | - | ||
3271 | - | ||
3272 | - | @Callable( | |
3273 | - | func initDuckTourAttempt (B) = if (( | |
3270 | + | let c = toString(gR.originCaller) | |
3271 | + | let B = valueOrElse(getString(bN(c)), "") | |
3272 | + | let fO = ap(this, B, 0, false) | |
3273 | + | let nm = bF(Q) | |
3274 | + | let nn = split(valueOrElse(getString(nm), ":0_15:0_18:0"), "_") | |
3275 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
3276 | + | let ig = (dM(split(jz.description, "_")[dq]) / cN) | |
3277 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
3278 | + | let if = bD(Q) | |
3279 | + | let ik = ie(if, ig, ih) | |
3280 | + | let no = split(ik[bi], "_") | |
3281 | + | let np = parseIntValue(no[bk]) | |
3282 | + | let nq = parseIntValue(no[bl]) | |
3283 | + | let nr = split(nl, "_") | |
3284 | + | let ns = gA(nn, fE(ik[bh]), np, nq, true, nil) | |
3285 | + | let gG = ns._1 | |
3286 | + | let nt = ns._2 | |
3287 | + | let nu = ns._3 | |
3288 | + | let nv = gA(nr, gG, nt, nu, false, fO) | |
3289 | + | let gK = nv._1 | |
3290 | + | let nw = nv._2 | |
3291 | + | let nx = nv._3 | |
3292 | + | let nk = fJ(gK) | |
3293 | + | let kf = makeString([no[bj], toString(nw), toString(nx), no[bm]], "_") | |
3294 | + | $Tuple2(([StringEntry(nm, nl), StringEntry(if, makeString_2C([ik[be], ik[bf], ik[bg], nk, kf], ":"))] ++ lt), 0) | |
3295 | + | } | |
3296 | + | } | |
3297 | + | ||
3298 | + | ||
3299 | + | ||
3300 | + | @Callable(gR) | |
3301 | + | func initDuckTourAttempt (B) = if ((gR.caller != dn)) | |
3274 | 3302 | then throw("Access denied") | |
3275 | 3303 | else { | |
3276 | - | let | |
3277 | - | let | |
3278 | - | let | |
3279 | - | let | |
3280 | - | let | |
3281 | - | let | |
3282 | - | let | |
3283 | - | $Tuple2([IntegerEntry(K(B), | |
3304 | + | let ji = A(B) | |
3305 | + | let jj = aj(valueOrElse(getInteger(E(B)), 0)) | |
3306 | + | let kC = valueOrElse(getInteger(ji), jj) | |
3307 | + | let ny = bP(B) | |
3308 | + | let jx = valueOrElse(getString(ny), aN) | |
3309 | + | let ck = valueOrElse(getInteger(dn, bV), 0) | |
3310 | + | let nz = (toString(ck) + "_T_0") | |
3311 | + | $Tuple2([IntegerEntry(K(B), kC), IntegerEntry(ji, jj), StringEntry(L(B), jx), StringEntry(ny, nz)], nz) | |
3284 | 3312 | } | |
3285 | 3313 | ||
3286 | 3314 | ||
3287 | 3315 | ||
3288 | - | @Callable( | |
3316 | + | @Callable(gR) | |
3289 | 3317 | func breakAttempt () = { | |
3290 | - | let | |
3291 | - | let B = valueOrErrorMessage(getString( | |
3292 | - | let | |
3293 | - | let | |
3294 | - | if ((split( | |
3318 | + | let lt = lp(gR) | |
3319 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked") | |
3320 | + | let ny = bP(B) | |
3321 | + | let jx = valueOrElse(getString(ny), aN) | |
3322 | + | if ((split(jx, "_")[bs] != "T")) | |
3295 | 3323 | then throw("Your duck is not in the tournament") | |
3296 | 3324 | else { | |
3297 | - | let | |
3298 | - | let | |
3299 | - | $Tuple2((( | |
3300 | - | } | |
3301 | - | } | |
3302 | - | ||
3303 | - | ||
3304 | - | ||
3305 | - | @Callable( | |
3306 | - | func breakAttemptCallback () = if (( | |
3325 | + | let nA = getIntegerValue(K(B)) | |
3326 | + | let kI = getStringValue(L(B)) | |
3327 | + | $Tuple2(((lt :+ IntegerEntry(A(B), nA)) :+ StringEntry(ny, kI)), jx) | |
3328 | + | } | |
3329 | + | } | |
3330 | + | ||
3331 | + | ||
3332 | + | ||
3333 | + | @Callable(gR) | |
3334 | + | func breakAttemptCallback () = if ((gR.caller != dn)) | |
3307 | 3335 | then throw("Access denied") | |
3308 | 3336 | else { | |
3309 | - | let B = valueOrErrorMessage(getString( | |
3310 | - | $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry( | |
3337 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.originCaller))), "You don't have a duck staked") | |
3338 | + | $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bP(B), getStringValue(L(B)))], "breakAttemptCallback") | |
3311 | 3339 | } | |
3312 | 3340 | ||
3313 | 3341 | ||
3314 | 3342 | ||
3315 | - | @Callable( | |
3316 | - | func exitTournamentInternal (B) = if (( | |
3343 | + | @Callable(gR) | |
3344 | + | func exitTournamentInternal (B) = if ((gR.caller != this)) | |
3317 | 3345 | then throw("Access denied") | |
3318 | 3346 | else { | |
3319 | - | let | |
3320 | - | let | |
3321 | - | $Tuple2([IntegerEntry(A(B), | |
3347 | + | let nA = getIntegerValue(K(B)) | |
3348 | + | let kI = getStringValue(L(B)) | |
3349 | + | $Tuple2([IntegerEntry(A(B), nA), StringEntry(bP(B), kI)], false) | |
3322 | 3350 | } | |
3323 | 3351 | ||
3324 | 3352 | ||
3325 | 3353 | ||
3326 | - | @Callable( | |
3327 | - | func exitDeliveryInternal (B) = if (( | |
3354 | + | @Callable(gR) | |
3355 | + | func exitDeliveryInternal (B) = if ((gR.caller != this)) | |
3328 | 3356 | then throw("Access denied") | |
3329 | 3357 | else { | |
3330 | - | let | |
3331 | - | $Tuple2(( | |
3358 | + | let mq = kz(B, false, 0, 0) | |
3359 | + | $Tuple2((mq._1 ++ mq._2), false) | |
3332 | 3360 | } | |
3333 | 3361 | ||
3334 | 3362 | ||
3335 | 3363 | ||
3336 | - | @Callable( | |
3337 | - | func autoExitDelivery (B, | |
3364 | + | @Callable(gR) | |
3365 | + | func autoExitDelivery (B,jc,nB,kA) = if ((gR.caller != this)) | |
3338 | 3366 | then throw("Access denied") | |
3339 | 3367 | else { | |
3340 | - | let | |
3341 | - | $Tuple2( | |
3368 | + | let mq = kz(B, true, jc, kA) | |
3369 | + | $Tuple2(mq._1, mq._3) | |
3342 | 3370 | } | |
3343 | 3371 | ||
3344 | 3372 | ||
3345 | 3373 | ||
3346 | - | @Callable( | |
3347 | - | func breakDelivery () = $Tuple2( | |
3348 | - | ||
3349 | - | ||
3350 | - | ||
3351 | - | @Callable( | |
3352 | - | func prepareRobbery ( | |
3353 | - | let | |
3354 | - | if (!(sigVerify_8Kb( | |
3374 | + | @Callable(gR) | |
3375 | + | func breakDelivery () = $Tuple2(lp(gR), "breakDelivery") | |
3376 | + | ||
3377 | + | ||
3378 | + | ||
3379 | + | @Callable(gR) | |
3380 | + | func prepareRobbery (iX,iY) = { | |
3381 | + | let lt = lp(gR) | |
3382 | + | if (!(sigVerify_8Kb(iX, iY, ee))) | |
3355 | 3383 | then throw("signature does not match") | |
3356 | - | else if ((size( | |
3384 | + | else if ((size(gR.payments) != 1)) | |
3357 | 3385 | then throw("exactly 1 payment must be attached") | |
3358 | 3386 | else { | |
3359 | - | let | |
3360 | - | let | |
3361 | - | if (if (!(isDefined( | |
3387 | + | let lu = gR.payments[0] | |
3388 | + | let nC = lu.amount | |
3389 | + | if (if (!(isDefined(lu.assetId))) | |
3362 | 3390 | then true | |
3363 | - | else (value( | |
3391 | + | else (value(lu.assetId) != du)) | |
3364 | 3392 | then throw("WLGOLD payments only!") | |
3365 | 3393 | else { | |
3366 | - | let | |
3367 | - | if ((2 > size( | |
3394 | + | let fw = split(toUtf8String(iX), "|") | |
3395 | + | if ((2 > size(fw))) | |
3368 | 3396 | then throw("Wrong message format") | |
3369 | 3397 | else { | |
3370 | - | let | |
3371 | - | then | |
3398 | + | let jg = if ((size(fw) >= 2)) | |
3399 | + | then fw[2] | |
3372 | 3400 | else "" | |
3373 | - | let | |
3374 | - | let | |
3375 | - | if (( | |
3376 | - | then throw(((("Tx ids don't match! In state: " + | |
3401 | + | let bR = toString(gR.caller) | |
3402 | + | let jh = valueOrElse(getString(dQ(bR)), "") | |
3403 | + | if ((jh != jg)) | |
3404 | + | then throw(((("Tx ids don't match! In state: " + jh) + ", in msg: ") + jg)) | |
3377 | 3405 | else { | |
3378 | - | let B = | |
3379 | - | if ( | |
3406 | + | let B = fw[0] | |
3407 | + | if (kx(B)) | |
3380 | 3408 | then throw("prepareRobbery_checkTournament") | |
3381 | - | else if ( | |
3409 | + | else if (ky(B)) | |
3382 | 3410 | then throw("prepareRobbery_checkDelivery") | |
3383 | 3411 | else { | |
3384 | 3412 | let aB = ax(this, B)._1 | |
3385 | - | if ((aB > | |
3386 | - | then throw(((("Payment " + toString( | |
3413 | + | if ((aB > nC)) | |
3414 | + | then throw(((("Payment " + toString(nC)) + " < required ") + toString(aB))) | |
3387 | 3415 | else { | |
3388 | - | let | |
3416 | + | let nD = split(fw[1], "_") | |
3389 | 3417 | let aA = lastBlock.timestamp | |
3390 | 3418 | let aC = valueOrElse(getInteger(S(B)), 0) | |
3391 | 3419 | let aD = valueOrElse(getString(T(B)), "") | |
3395 | 3423 | else false) | |
3396 | 3424 | then throw(("You already started robbing, wait till " + toString(aE))) | |
3397 | 3425 | else { | |
3398 | - | func | |
3399 | - | let | |
3400 | - | let | |
3401 | - | if (( | |
3426 | + | func nE (eY,Q) = { | |
3427 | + | let nF = valueOrElse(getInteger(P(Q)), 0) | |
3428 | + | let nG = valueOrElse(getInteger(R(Q)), 0) | |
3429 | + | if ((nF > size(v))) | |
3402 | 3430 | then throw("Invalid state") | |
3403 | - | else if ((aA > | |
3431 | + | else if ((aA > nG)) | |
3404 | 3432 | then { | |
3405 | - | let | |
3406 | - | if ((0 >= | |
3407 | - | then | |
3433 | + | let nH = valueOrElse(getInteger(bx(Q)), 0) | |
3434 | + | if ((0 >= nH)) | |
3435 | + | then eY | |
3408 | 3436 | else { | |
3409 | - | let | |
3410 | - | let | |
3411 | - | let | |
3412 | - | let | |
3413 | - | let | |
3414 | - | let | |
3415 | - | if ((w > | |
3416 | - | then | |
3417 | - | else ( | |
3437 | + | let gy = value(assetInfo(fromBase58String(Q))) | |
3438 | + | let jD = split(gy.description, "_") | |
3439 | + | let jp = dM(jD[dq]) | |
3440 | + | let nI = jo(Q, jp) | |
3441 | + | let gX = (aA - nH) | |
3442 | + | let jG = fraction(gX, (nI * jp), a) | |
3443 | + | if ((w > jG)) | |
3444 | + | then eY | |
3445 | + | else (eY :+ Q) | |
3418 | 3446 | } | |
3419 | 3447 | } | |
3420 | - | else | |
3448 | + | else eY | |
3421 | 3449 | } | |
3422 | 3450 | ||
3423 | - | let | |
3424 | - | let | |
3425 | - | let | |
3426 | - | let | |
3427 | - | func | |
3428 | - | then | |
3429 | - | else | |
3430 | - | ||
3431 | - | func | |
3432 | - | then | |
3451 | + | let nJ = { | |
3452 | + | let fa = nD | |
3453 | + | let fb = size(fa) | |
3454 | + | let fc = nil | |
3455 | + | func fd (fe,ff) = if ((ff >= fb)) | |
3456 | + | then fe | |
3457 | + | else nE(fe, fa[ff]) | |
3458 | + | ||
3459 | + | func fg (fe,ff) = if ((ff >= fb)) | |
3460 | + | then fe | |
3433 | 3461 | else throw("List size exceeds 10") | |
3434 | 3462 | ||
3435 | - | fc | |
3463 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3436 | 3464 | } | |
3437 | - | if ((size( | |
3465 | + | if ((size(nJ) == 0)) | |
3438 | 3466 | then throw("No candidates for robbery") | |
3439 | 3467 | else { | |
3440 | - | let | |
3441 | - | let Q = | |
3442 | - | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ | |
3468 | + | let nK = dX(size(nJ), iX, iY) | |
3469 | + | let Q = nJ[nK] | |
3470 | + | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ lt), Q) | |
3443 | 3471 | } | |
3444 | 3472 | } | |
3445 | 3473 | } | |
3452 | 3480 | ||
3453 | 3481 | ||
3454 | 3482 | ||
3455 | - | @Callable( | |
3456 | - | func robLand ( | |
3457 | - | let | |
3458 | - | if (!(sigVerify_8Kb( | |
3483 | + | @Callable(gR) | |
3484 | + | func robLand (iX,iY) = { | |
3485 | + | let lt = lp(gR) | |
3486 | + | if (!(sigVerify_8Kb(iX, iY, ee))) | |
3459 | 3487 | then throw("signature does not match") | |
3460 | 3488 | else { | |
3461 | - | let | |
3462 | - | let B = valueOrErrorMessage(getString( | |
3489 | + | let bR = toString(gR.caller) | |
3490 | + | let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked") | |
3463 | 3491 | let aA = lastBlock.timestamp | |
3464 | - | $Tuple2(( | |
3465 | - | } | |
3466 | - | } | |
3467 | - | ||
3468 | - | ||
3469 | - | ||
3470 | - | @Callable( | |
3492 | + | $Tuple2((lt :+ IntegerEntry(N(B), aA)), 0) | |
3493 | + | } | |
3494 | + | } | |
3495 | + | ||
3496 | + | ||
3497 | + | ||
3498 | + | @Callable(gR) | |
3471 | 3499 | func acceptDelivery () = { | |
3472 | - | let | |
3473 | - | let | |
3474 | - | let B = valueOrErrorMessage(getString( | |
3475 | - | let | |
3476 | - | let | |
3477 | - | if (( | |
3478 | - | then throw(((("Delivery is not available, fund=" + | |
3500 | + | let lt = lp(gR) | |
3501 | + | let bR = toString(gR.caller) | |
3502 | + | let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked") | |
3503 | + | let nL = valueOrElse(getInteger(dk, bT), 0) | |
3504 | + | let kG = valueOrElse(getInteger(dk, bU), 0) | |
3505 | + | if ((aQ > (nL - kG))) | |
3506 | + | then throw(((("Delivery is not available, fund=" + dR(nL, 6)) + ", locked=") + dR(kG, 6))) | |
3479 | 3507 | else { | |
3480 | 3508 | let aA = lastBlock.timestamp | |
3481 | - | let | |
3482 | - | if (( | |
3483 | - | then throw(("Delivery is forbidden for your duck until " + toString( | |
3509 | + | let nM = valueOrElse(getInteger(U(B)), 0) | |
3510 | + | if ((nM > aA)) | |
3511 | + | then throw(("Delivery is forbidden for your duck until " + toString(nM))) | |
3484 | 3512 | else { | |
3485 | 3513 | let av = getIntegerValue(A(B)) | |
3486 | 3514 | if ((0 >= av)) | |
3487 | 3515 | then throw("You cannot accept delivery with zero health") | |
3488 | 3516 | else { | |
3489 | - | let | |
3490 | - | let | |
3491 | - | let | |
3492 | - | let | |
3493 | - | let | |
3494 | - | let | |
3495 | - | if (if (( | |
3496 | - | then ( | |
3517 | + | let kF = V(bR) | |
3518 | + | let fY = valueOrElse(getInteger(kF), 0) | |
3519 | + | let nN = valueOrElse(getInteger(W(bR)), 0) | |
3520 | + | let nO = (aA / a) | |
3521 | + | let nP = valueOrElse(getInteger(do, d(bR)), 0) | |
3522 | + | let nQ = (aS + (nP / aT)) | |
3523 | + | if (if ((fY >= nQ)) | |
3524 | + | then (nN == nO) | |
3497 | 3525 | else false) | |
3498 | - | then throw((("You already used " + toString( | |
3499 | - | else if ( | |
3526 | + | then throw((("You already used " + toString(nQ)) + " delivery attempts for today")) | |
3527 | + | else if (kx(B)) | |
3500 | 3528 | then throw("acceptDelivery_checkTournament") | |
3501 | - | else if ( | |
3529 | + | else if (ky(B)) | |
3502 | 3530 | then throw("acceptDelivery_checkDelivery") | |
3503 | 3531 | else { | |
3504 | - | let | |
3505 | - | let | |
3506 | - | let | |
3507 | - | let | |
3508 | - | $Tuple2(([StringEntry(L(B), | |
3532 | + | let nR = dH(invoke(dk, "updateDeliveryLocked", [(kG + aQ)], nil)) | |
3533 | + | let ny = bP(B) | |
3534 | + | let jx = valueOrElse(getString(ny), aN) | |
3535 | + | let nS = (toString(aA) + "_D_0") | |
3536 | + | $Tuple2(([StringEntry(L(B), jx), StringEntry(ny, nS), IntegerEntry(kF, if ((nN != nO)) | |
3509 | 3537 | then 0 | |
3510 | - | else | |
3538 | + | else fY)] ++ lt), $Tuple2(nS, nR)) | |
3511 | 3539 | } | |
3512 | 3540 | } | |
3513 | 3541 | } | |
3516 | 3544 | ||
3517 | 3545 | ||
3518 | 3546 | ||
3519 | - | @Callable( | |
3520 | - | func checkDeliveryCallback (B) = if (( | |
3547 | + | @Callable(gR) | |
3548 | + | func checkDeliveryCallback (B) = if ((gR.caller != dn)) | |
3521 | 3549 | then throw("Access denied") | |
3522 | - | else $Tuple2(nil, ku(B)) | |
3550 | + | else $Tuple2(nil, ky(B)) | |
3551 | + | ||
3552 | + | ||
3553 | + | ||
3554 | + | @Callable(gR) | |
3555 | + | func buyRoboDuck () = if (!(cB)) | |
3556 | + | then throw("Feature is turned off") | |
3557 | + | else { | |
3558 | + | let lt = lp(gR) | |
3559 | + | if ((size(gR.payments) != 1)) | |
3560 | + | then throw("Exactly one payment required") | |
3561 | + | else { | |
3562 | + | let lu = value(gR.payments[0]) | |
3563 | + | if ((lu.assetId != cE)) | |
3564 | + | then throw("Allowed USDT payment only!") | |
3565 | + | else if ((lu.amount != em)) | |
3566 | + | then throw((("Payment attached should be " + dR(em, 6)) + " USDT")) | |
3567 | + | else { | |
3568 | + | let nT = valueOrElse(getInteger(eF()), 0) | |
3569 | + | let nU = toBytes(nT) | |
3570 | + | let ex = ((aH + "-") + takeRight(toBase16String(nU), 8)) | |
3571 | + | let nV = takeRight(toBase16String(sha256_16Kb(nU)), 6) | |
3572 | + | let iU = Issue(ex, ("Robo Duck NFT for WavesLands game, background color = #" + nV), 1, 0, false) | |
3573 | + | let bv = calculateAssetId(iU) | |
3574 | + | $Tuple2(((((lt :+ IntegerEntry(eF(), (nT + 1))) :+ iU) :+ ScriptTransfer(gR.originCaller, 1, bv)) :+ ScriptTransfer(dk, lu.amount, cE)), $Tuple2(toBase58String(bv), nV)) | |
3575 | + | } | |
3576 | + | } | |
3577 | + | } | |
3523 | 3578 | ||
3524 | 3579 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 86400000 | |
5 | 5 | ||
6 | 6 | func b (c) = ("lastArbTimeUser_" + c) | |
7 | 7 | ||
8 | 8 | ||
9 | 9 | func d (c) = ("acresStakedAmountByUser_" + c) | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | let e = 100000000 | |
13 | 13 | ||
14 | 14 | let f = 3200 | |
15 | 15 | ||
16 | 16 | let g = 4000 | |
17 | 17 | ||
18 | 18 | let h = 3 | |
19 | 19 | ||
20 | 20 | let i = 100000000 | |
21 | 21 | ||
22 | 22 | let j = 400 | |
23 | 23 | ||
24 | 24 | let k = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
25 | 25 | ||
26 | 26 | let l = 0 | |
27 | 27 | ||
28 | 28 | let m = 1 | |
29 | 29 | ||
30 | 30 | let n = 2 | |
31 | 31 | ||
32 | 32 | let o = 3 | |
33 | 33 | ||
34 | 34 | let p = 4 | |
35 | 35 | ||
36 | 36 | let q = 0 | |
37 | 37 | ||
38 | 38 | let r = 6 | |
39 | 39 | ||
40 | 40 | let s = 2 | |
41 | 41 | ||
42 | 42 | let t = 2 | |
43 | 43 | ||
44 | 44 | let u = 30 | |
45 | 45 | ||
46 | 46 | let v = [0, 600000, 900000, 43200000, 21600000] | |
47 | 47 | ||
48 | 48 | let w = 20000000 | |
49 | 49 | ||
50 | 50 | let x = 1 | |
51 | 51 | ||
52 | 52 | let y = 0 | |
53 | 53 | ||
54 | 54 | let z = 1 | |
55 | 55 | ||
56 | 56 | func A (B) = ("duckHealth_" + B) | |
57 | 57 | ||
58 | 58 | ||
59 | 59 | func C (B) = ("duckChars_" + B) | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | func D (B) = ("duckXP_" + B) | |
63 | 63 | ||
64 | 64 | ||
65 | 65 | func E (B) = ("duckLevel_" + B) | |
66 | 66 | ||
67 | 67 | ||
68 | 68 | func F (B) = ("duckFreePoints_" + B) | |
69 | 69 | ||
70 | 70 | ||
71 | 71 | func G (B) = ("duckEquipment_" + B) | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func H (c) = ("userXP_" + c) | |
75 | 75 | ||
76 | 76 | ||
77 | 77 | func I (c) = ("userLevel_" + c) | |
78 | 78 | ||
79 | 79 | ||
80 | 80 | func J (c) = ("userFreePoints_" + c) | |
81 | 81 | ||
82 | 82 | ||
83 | 83 | func K (B) = ("savedHealth_" + B) | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func L (B) = ("savedLocation_" + B) | |
87 | 87 | ||
88 | 88 | ||
89 | 89 | func M (B) = ("duckBuffs_" + B) | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | func N (B) = ("lastRobberyTime_" + B) | |
93 | 93 | ||
94 | 94 | ||
95 | 95 | func O (B) = ("lastRobberyCost_" + B) | |
96 | 96 | ||
97 | 97 | ||
98 | 98 | func P (Q) = ("landRobberyState_" + Q) | |
99 | 99 | ||
100 | 100 | ||
101 | 101 | func R (Q) = ("landCooldownETA_" + Q) | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | func S (B) = ("duckRobberyState_" + B) | |
105 | 105 | ||
106 | 106 | ||
107 | 107 | func T (B) = ("lockedLandByDuck_" + B) | |
108 | 108 | ||
109 | 109 | ||
110 | 110 | func U (B) = ("deliveryDelayByDuck_" + B) | |
111 | 111 | ||
112 | 112 | ||
113 | 113 | func V (c) = ("userDeliveryCount_" + c) | |
114 | 114 | ||
115 | 115 | ||
116 | 116 | func W (c) = ("userLastDeliveryDay_" + c) | |
117 | 117 | ||
118 | 118 | ||
119 | 119 | let X = 10000 | |
120 | 120 | ||
121 | 121 | let Y = 10000 | |
122 | 122 | ||
123 | 123 | let Z = 2000 | |
124 | 124 | ||
125 | 125 | let aa = 100000 | |
126 | 126 | ||
127 | 127 | let ab = 1000000 | |
128 | 128 | ||
129 | 129 | let ac = 5000000 | |
130 | 130 | ||
131 | 131 | let ad = 10000 | |
132 | 132 | ||
133 | 133 | let ae = 1000000 | |
134 | 134 | ||
135 | 135 | let af = 1000000 | |
136 | 136 | ||
137 | 137 | let ag = 10000 | |
138 | 138 | ||
139 | 139 | func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e) | |
140 | 140 | ||
141 | 141 | ||
142 | 142 | func aj (ak) = (100 + ak) | |
143 | 143 | ||
144 | 144 | ||
145 | 145 | func al (am,an) = { | |
146 | 146 | let ao = ah(an) | |
147 | 147 | [ao, (h * (ao - am))] | |
148 | 148 | } | |
149 | 149 | ||
150 | 150 | ||
151 | 151 | func ap (aq,B,ar,as) = { | |
152 | 152 | let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_") | |
153 | 153 | let au = valueOrElse(getInteger(aq, E(B)), 0) | |
154 | 154 | let av = valueOrElse(getInteger(aq, A(B)), aj(au)) | |
155 | 155 | let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_") | |
156 | 156 | ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as) | |
157 | 157 | then [ar, ar, ar, ar, ar] | |
158 | 158 | else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])])) | |
159 | 159 | } | |
160 | 160 | ||
161 | 161 | ||
162 | 162 | func ax (aq,B) = { | |
163 | 163 | let ay = valueOrElse(getInteger(aq, O(B)), 0) | |
164 | 164 | let az = valueOrElse(getInteger(aq, N(B)), 0) | |
165 | 165 | let aA = lastBlock.timestamp | |
166 | 166 | let aB = max([i, (ay - (j * (aA - az)))]) | |
167 | 167 | let aC = valueOrElse(getInteger(aq, S(B)), 0) | |
168 | 168 | let aD = valueOrElse(getString(aq, T(B)), "") | |
169 | 169 | let aE = valueOrElse(getInteger(aq, R(aD)), 0) | |
170 | 170 | $Tuple5(aB, az, aC, aD, aE) | |
171 | 171 | } | |
172 | 172 | ||
173 | 173 | ||
174 | 174 | let aF = "LAND" | |
175 | 175 | ||
176 | 176 | let aG = "DUCK" | |
177 | 177 | ||
178 | - | let aH = " | |
179 | - | ||
180 | - | let aI = | |
181 | - | ||
182 | - | let aJ = | |
183 | - | ||
184 | - | let aK = | |
185 | - | ||
186 | - | let aL = | |
187 | - | ||
188 | - | let aM = | |
189 | - | ||
190 | - | let aN = | |
191 | - | ||
192 | - | let aO = | |
193 | - | ||
194 | - | let aP = | |
195 | - | ||
196 | - | let aQ = | |
197 | - | ||
198 | - | let aR = | |
199 | - | ||
200 | - | let aS = | |
201 | - | ||
202 | - | let aT = | |
203 | - | ||
204 | - | let aU = [" | |
205 | - | ||
206 | - | let aV = | |
207 | - | ||
208 | - | let aW = | |
209 | - | ||
210 | - | let aX = [ | |
211 | - | ||
212 | - | let aY = | |
213 | - | ||
214 | - | let aZ = | |
215 | - | ||
216 | - | let ba = | |
217 | - | ||
218 | - | let bb = | |
178 | + | let aH = "ROBO" | |
179 | + | ||
180 | + | let aI = "PRESALE" | |
181 | + | ||
182 | + | let aJ = 6 | |
183 | + | ||
184 | + | let aK = 25 | |
185 | + | ||
186 | + | let aL = 3456000 | |
187 | + | ||
188 | + | let aM = 10000000000 | |
189 | + | ||
190 | + | let aN = "Africa_F_Africa" | |
191 | + | ||
192 | + | let aO = 39637 | |
193 | + | ||
194 | + | let aP = 10 | |
195 | + | ||
196 | + | let aQ = 50000 | |
197 | + | ||
198 | + | let aR = 600000 | |
199 | + | ||
200 | + | let aS = 1 | |
201 | + | ||
202 | + | let aT = 50000000 | |
203 | + | ||
204 | + | let aU = ["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"] | |
205 | + | ||
206 | + | let aV = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
207 | + | ||
208 | + | let aW = 10000000 | |
209 | + | ||
210 | + | let aX = [15, 16, 17, 18, 19, 20] | |
211 | + | ||
212 | + | let aY = ["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_"] | |
213 | + | ||
214 | + | let aZ = 6 | |
215 | + | ||
216 | + | let ba = 8 | |
217 | + | ||
218 | + | let bb = 9 | |
219 | 219 | ||
220 | 220 | let bc = 10 | |
221 | 221 | ||
222 | - | let bd = 0 | |
223 | - | ||
224 | - | let be = 1 | |
225 | - | ||
226 | - | let bf = 2 | |
227 | - | ||
228 | - | let bg = 3 | |
229 | - | ||
230 | - | let bh = 4 | |
231 | - | ||
232 | - | let bi = 0 | |
233 | - | ||
234 | - | let bj = 1 | |
235 | - | ||
236 | - | let bk = 2 | |
237 | - | ||
238 | - | let bl = 3 | |
239 | - | ||
240 | - | let bm = 0 | |
241 | - | ||
242 | - | let bn = 1 | |
243 | - | ||
244 | - | let bo = 2 | |
245 | - | ||
246 | - | let bp = 3 | |
247 | - | ||
248 | - | let bq = 0 | |
249 | - | ||
250 | - | let br = 1 | |
251 | - | ||
252 | - | let bs = 2 | |
253 | - | ||
254 | - | func bt (bu) = ("no_" + bu) | |
255 | - | ||
256 | - | ||
257 | - | func bv (bu) = ("lcna_" + bu) | |
258 | - | ||
259 | - | ||
260 | - | func bw (bu) = ("st_" + bu) | |
261 | - | ||
262 | - | ||
263 | - | func bx (by,bu) = makeString(["las", by, bu], "_") | |
264 | - | ||
265 | - | ||
266 | - | func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB) | |
267 | - | ||
268 | - | ||
269 | - | func bC (Q) = ("wh_" + Q) | |
270 | - | ||
271 | - | ||
272 | - | func bD (bu) = ("infraLevel_" + bu) | |
273 | - | ||
274 | - | ||
275 | - | func bE (Q) = ("fortifications_" + Q) | |
276 | - | ||
277 | - | ||
278 | - | func bF (bu) = ("duckCustomNameByAssetId_" + bu) | |
279 | - | ||
280 | - | ||
281 | - | func bG (c) = ("accountCustomNameByAddr_" + c) | |
282 | - | ||
283 | - | ||
284 | - | func bH (c) = ("accRefBy_" + c) | |
285 | - | ||
286 | - | ||
287 | - | func bI (B) = ("onboardArtActivatedOnDuck_" + B) | |
288 | - | ||
289 | - | ||
290 | - | func bJ (c) = ("onboardArtActivatedDuckBy_" + c) | |
291 | - | ||
292 | - | ||
293 | - | func bK (c) = ("accReferrals_" + c) | |
294 | - | ||
295 | - | ||
296 | - | func bL (bu) = ("duckOwner_" + bu) | |
297 | - | ||
298 | - | ||
299 | - | func bM (bB) = ("stakedDuckByOwner_" + bB) | |
300 | - | ||
301 | - | ||
302 | - | func bN (B) = ("backPack_" + B) | |
303 | - | ||
304 | - | ||
305 | - | func bO (B) = ("duckLocation_" + B) | |
306 | - | ||
307 | - | ||
308 | - | func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ) | |
309 | - | ||
310 | - | ||
311 | - | func bR () = "emergencyWarehouseProducts" | |
312 | - | ||
313 | - | ||
314 | - | let bS = "deliveryFund" | |
315 | - | ||
316 | - | let bT = "deliveryLocked" | |
317 | - | ||
318 | - | let bU = "%s__lastTourId" | |
319 | - | ||
320 | - | func bV (bW) = ("%s%d__tourStaticData__" + toString(bW)) | |
321 | - | ||
322 | - | ||
323 | - | func bX (bW) = ("%s%d__tourDynamicData__" + toString(bW)) | |
324 | - | ||
325 | - | ||
326 | - | func bY (bW,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bW), B], "__") | |
327 | - | ||
328 | - | ||
329 | - | let bZ = 0 | |
330 | - | ||
331 | - | let ca = 1 | |
332 | - | ||
333 | - | let cb = 6 | |
334 | - | ||
335 | - | let cc = 1 | |
336 | - | ||
337 | - | func cd (ce,bW) = { | |
338 | - | let cf = split(valueOrErrorMessage(getString(ce, bV(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__") | |
339 | - | let cg = split_4C(valueOrErrorMessage(getString(ce, bX(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__") | |
340 | - | [cf, cg] | |
341 | - | } | |
342 | - | ||
343 | - | ||
344 | - | func ch (ce,ci) = { | |
345 | - | let cj = valueOrElse(getInteger(ce, bU), 0) | |
346 | - | let ck = split(ci, "_") | |
222 | + | let bd = 10 | |
223 | + | ||
224 | + | let be = 0 | |
225 | + | ||
226 | + | let bf = 1 | |
227 | + | ||
228 | + | let bg = 2 | |
229 | + | ||
230 | + | let bh = 3 | |
231 | + | ||
232 | + | let bi = 4 | |
233 | + | ||
234 | + | let bj = 0 | |
235 | + | ||
236 | + | let bk = 1 | |
237 | + | ||
238 | + | let bl = 2 | |
239 | + | ||
240 | + | let bm = 3 | |
241 | + | ||
242 | + | let bn = 0 | |
243 | + | ||
244 | + | let bo = 1 | |
245 | + | ||
246 | + | let bp = 2 | |
247 | + | ||
248 | + | let bq = 3 | |
249 | + | ||
250 | + | let br = 0 | |
251 | + | ||
252 | + | let bs = 1 | |
253 | + | ||
254 | + | let bt = 2 | |
255 | + | ||
256 | + | func bu (bv) = ("no_" + bv) | |
257 | + | ||
258 | + | ||
259 | + | func bw (bv) = ("lcna_" + bv) | |
260 | + | ||
261 | + | ||
262 | + | func bx (bv) = ("st_" + bv) | |
263 | + | ||
264 | + | ||
265 | + | func by (bz,bv) = makeString(["las", bz, bv], "_") | |
266 | + | ||
267 | + | ||
268 | + | func bA (bB,bv,bC) = ((((("sttao_" + bB) + "_") + bv) + "_") + bC) | |
269 | + | ||
270 | + | ||
271 | + | func bD (Q) = ("wh_" + Q) | |
272 | + | ||
273 | + | ||
274 | + | func bE (bv) = ("infraLevel_" + bv) | |
275 | + | ||
276 | + | ||
277 | + | func bF (Q) = ("fortifications_" + Q) | |
278 | + | ||
279 | + | ||
280 | + | func bG (bv) = ("duckCustomNameByAssetId_" + bv) | |
281 | + | ||
282 | + | ||
283 | + | func bH (c) = ("accountCustomNameByAddr_" + c) | |
284 | + | ||
285 | + | ||
286 | + | func bI (c) = ("accRefBy_" + c) | |
287 | + | ||
288 | + | ||
289 | + | func bJ (B) = ("onboardArtActivatedOnDuck_" + B) | |
290 | + | ||
291 | + | ||
292 | + | func bK (c) = ("onboardArtActivatedDuckBy_" + c) | |
293 | + | ||
294 | + | ||
295 | + | func bL (c) = ("accReferrals_" + c) | |
296 | + | ||
297 | + | ||
298 | + | func bM (bv) = ("duckOwner_" + bv) | |
299 | + | ||
300 | + | ||
301 | + | func bN (bC) = ("stakedDuckByOwner_" + bC) | |
302 | + | ||
303 | + | ||
304 | + | func bO (B) = ("backPack_" + B) | |
305 | + | ||
306 | + | ||
307 | + | func bP (B) = ("duckLocation_" + B) | |
308 | + | ||
309 | + | ||
310 | + | func bQ (bR) = ("%s%s__userGwlReleaseTime__" + bR) | |
311 | + | ||
312 | + | ||
313 | + | func bS () = "emergencyWarehouseProducts" | |
314 | + | ||
315 | + | ||
316 | + | let bT = "deliveryFund" | |
317 | + | ||
318 | + | let bU = "deliveryLocked" | |
319 | + | ||
320 | + | let bV = "%s__lastTourId" | |
321 | + | ||
322 | + | func bW (bX) = ("%s%d__tourStaticData__" + toString(bX)) | |
323 | + | ||
324 | + | ||
325 | + | func bY (bX) = ("%s%d__tourDynamicData__" + toString(bX)) | |
326 | + | ||
327 | + | ||
328 | + | func bZ (bX,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bX), B], "__") | |
329 | + | ||
330 | + | ||
331 | + | let ca = 0 | |
332 | + | ||
333 | + | let cb = 1 | |
334 | + | ||
335 | + | let cc = 6 | |
336 | + | ||
337 | + | let cd = 1 | |
338 | + | ||
339 | + | func ce (cf,bX) = { | |
340 | + | let cg = split(valueOrErrorMessage(getString(cf, bW(bX)), (("Error reading tournament " + toString(bX)) + " data")), "__") | |
341 | + | let ch = split_4C(valueOrErrorMessage(getString(cf, bY(bX)), (("Error reading tournament " + toString(bX)) + " data")), "__") | |
342 | + | [cg, ch] | |
343 | + | } | |
344 | + | ||
345 | + | ||
346 | + | func ci (cf,cj) = { | |
347 | + | let ck = valueOrElse(getInteger(cf, bV), 0) | |
348 | + | let cl = split(cj, "_") | |
347 | 349 | let aA = lastBlock.timestamp | |
348 | - | let | |
349 | - | let | |
350 | - | let | |
351 | - | if (if (if (( | |
352 | - | then (parseIntValue( | |
350 | + | let cm = ce(cf, ck) | |
351 | + | let cg = cm[ca] | |
352 | + | let ch = cm[cb] | |
353 | + | if (if (if ((cl[bs] == "T")) | |
354 | + | then (parseIntValue(cl[br]) == ck) | |
353 | 355 | else false) | |
354 | - | then ( | |
356 | + | then (ch[cd] == "INPROGRESS") | |
355 | 357 | else false) | |
356 | - | then (parseIntValue( | |
358 | + | then (parseIntValue(cg[cc]) > aA) | |
357 | 359 | else false | |
358 | 360 | } | |
359 | 361 | ||
360 | 362 | ||
361 | - | func | |
362 | - | let | |
363 | + | func cn (cj) = { | |
364 | + | let cl = split(cj, "_") | |
363 | 365 | let aA = lastBlock.timestamp | |
364 | - | let | |
365 | - | let | |
366 | - | if (if (( | |
367 | - | then (( | |
366 | + | let co = parseIntValue(cl[br]) | |
367 | + | let cp = parseIntValue(cl[bt]) | |
368 | + | if (if ((cl[bs] == "D")) | |
369 | + | then ((co + aR) > aA) | |
368 | 370 | else false) | |
369 | - | then (3 >= | |
371 | + | then (3 >= cp) | |
370 | 372 | else false | |
371 | 373 | } | |
372 | 374 | ||
373 | 375 | ||
374 | - | func | |
375 | - | let | |
376 | - | if (( | |
377 | - | then ( | |
376 | + | func cq (cj) = { | |
377 | + | let cr = split(cj, "_")[bs] | |
378 | + | if ((cr != "T")) | |
379 | + | then (cr != "D") | |
378 | 380 | else false | |
379 | 381 | } | |
380 | 382 | ||
381 | 383 | ||
382 | - | func | |
383 | - | let | |
384 | - | let | |
384 | + | func cs (cf,cj) = { | |
385 | + | let ck = valueOrElse(getInteger(cf, bV), 0) | |
386 | + | let cl = split(cj, "_") | |
385 | 387 | let aA = lastBlock.timestamp | |
386 | - | let | |
387 | - | let | |
388 | - | let | |
389 | - | let | |
390 | - | if (( | |
388 | + | let cm = ce(cf, ck) | |
389 | + | let cg = cm[ca] | |
390 | + | let ch = cm[cb] | |
391 | + | let cr = cl[bs] | |
392 | + | if ((cr == "D")) | |
391 | 393 | then true | |
392 | - | else if (if (if (( | |
393 | - | then (parseIntValue( | |
394 | + | else if (if (if ((cl[bs] == "T")) | |
395 | + | then (parseIntValue(cl[br]) == ck) | |
394 | 396 | else false) | |
395 | - | then ( | |
397 | + | then (ch[cd] == "INPROGRESS") | |
396 | 398 | else false) | |
397 | - | then (parseIntValue( | |
399 | + | then (parseIntValue(cg[cc]) > aA) | |
398 | 400 | else false | |
399 | 401 | } | |
400 | 402 | ||
401 | 403 | ||
402 | - | func cs (ct) = (parseIntValue(ct[aY]) * aV) | |
403 | - | ||
404 | - | ||
405 | - | func cu (cv,cw,cx) = throw(((((("Cheat attempt: oldLoc=" + cv) + ", newLoc=") + cw) + ", case=") + toString(cx))) | |
406 | - | ||
407 | - | ||
408 | - | let cy = false | |
404 | + | func ct (cu) = (parseIntValue(cu[aZ]) * aW) | |
405 | + | ||
406 | + | ||
407 | + | func cv (cw,cx,cy) = throw(((((("Cheat attempt: oldLoc=" + cw) + ", newLoc=") + cx) + ", case=") + toString(cy))) | |
408 | + | ||
409 | 409 | ||
410 | 410 | let cz = false | |
411 | 411 | ||
412 | - | let cA = 86400000 | |
413 | - | ||
414 | - | let cB = take(drop(this.bytes, 1), 1) | |
415 | - | ||
416 | - | let cC = { | |
417 | - | let cD = cB | |
418 | - | if ((base58'2W' == cD)) | |
412 | + | let cA = false | |
413 | + | ||
414 | + | let cB = true | |
415 | + | ||
416 | + | let cC = 86400000 | |
417 | + | ||
418 | + | let cD = take(drop(this.bytes, 1), 1) | |
419 | + | ||
420 | + | let cE = { | |
421 | + | let cF = cD | |
422 | + | if ((base58'2W' == cF)) | |
419 | 423 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
420 | - | else if ((base58'2T' == | |
424 | + | else if ((base58'2T' == cF)) | |
421 | 425 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
422 | 426 | else throw("Unknown chain") | |
423 | 427 | } | |
424 | 428 | ||
425 | - | let | |
426 | - | let | |
427 | - | if ((base58'2W' == | |
429 | + | let cG = { | |
430 | + | let cF = cD | |
431 | + | if ((base58'2W' == cF)) | |
428 | 432 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
429 | - | else if ((base58'2T' == | |
433 | + | else if ((base58'2T' == cF)) | |
430 | 434 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
431 | 435 | else throw("Unknown chain") | |
432 | 436 | } | |
433 | 437 | ||
434 | - | let | |
435 | - | let | |
436 | - | if ((base58'2W' == | |
438 | + | let cH = { | |
439 | + | let cF = cD | |
440 | + | if ((base58'2W' == cF)) | |
437 | 441 | then 10000000000 | |
438 | - | else if ((base58'2T' == | |
442 | + | else if ((base58'2T' == cF)) | |
439 | 443 | then 100000000 | |
440 | 444 | else throw("Unknown chain") | |
441 | 445 | } | |
442 | 446 | ||
443 | - | let | |
444 | - | let | |
445 | - | if ((base58'2W' == | |
446 | - | then | |
447 | - | else if ((base58'2T' == | |
447 | + | let cI = { | |
448 | + | let cF = cD | |
449 | + | if ((base58'2W' == cF)) | |
450 | + | then cC | |
451 | + | else if ((base58'2T' == cF)) | |
448 | 452 | then 60000 | |
449 | 453 | else throw("Unknown chain") | |
450 | 454 | } | |
451 | 455 | ||
452 | - | let | |
453 | - | let | |
454 | - | if ((base58'2W' == | |
456 | + | let cJ = { | |
457 | + | let cF = cD | |
458 | + | if ((base58'2W' == cF)) | |
455 | 459 | then 10800000 | |
456 | - | else if ((base58'2T' == | |
460 | + | else if ((base58'2T' == cF)) | |
457 | 461 | then 900000 | |
458 | 462 | else throw("Unknown chain") | |
459 | 463 | } | |
460 | 464 | ||
461 | - | let | |
462 | - | ||
463 | - | let | |
464 | - | ||
465 | - | let | |
466 | - | ||
467 | - | let | |
468 | - | ||
469 | - | let | |
470 | - | ||
471 | - | let | |
472 | - | ||
473 | - | let | |
474 | - | ||
475 | - | let | |
476 | - | ||
477 | - | let | |
478 | - | ||
479 | - | func | |
480 | - | ||
481 | - | ||
482 | - | let | |
483 | - | ||
484 | - | let | |
485 | - | ||
486 | - | let | |
487 | - | ||
488 | - | let | |
489 | - | ||
490 | - | let | |
491 | - | ||
492 | - | let | |
493 | - | ||
494 | - | func | |
495 | - | ||
496 | - | ||
497 | - | func | |
498 | - | ||
499 | - | ||
500 | - | func | |
501 | - | ||
502 | - | ||
503 | - | func | |
504 | - | ||
505 | - | ||
506 | - | let | |
507 | - | ||
508 | - | let | |
509 | - | ||
510 | - | let aq = | |
511 | - | ||
512 | - | let | |
513 | - | ||
514 | - | let | |
515 | - | ||
516 | - | let | |
517 | - | ||
518 | - | let | |
519 | - | ||
520 | - | let | |
521 | - | ||
522 | - | let | |
523 | - | ||
524 | - | let | |
525 | - | ||
526 | - | let | |
527 | - | ||
528 | - | let | |
529 | - | ||
530 | - | let | |
531 | - | ||
532 | - | let | |
533 | - | ||
534 | - | let | |
535 | - | ||
536 | - | let | |
537 | - | ||
538 | - | let | |
539 | - | ||
540 | - | func | |
541 | - | ||
542 | - | ||
543 | - | func | |
544 | - | ||
545 | - | ||
546 | - | func | |
547 | - | ||
548 | - | ||
549 | - | func | |
550 | - | ||
551 | - | ||
552 | - | func | |
553 | - | ||
554 | - | ||
555 | - | func | |
556 | - | let | |
557 | - | if ($isInstanceOf( | |
465 | + | let cK = "__" | |
466 | + | ||
467 | + | let cL = 1000000 | |
468 | + | ||
469 | + | let cM = 100000000 | |
470 | + | ||
471 | + | let cN = 25 | |
472 | + | ||
473 | + | let cO = 100 | |
474 | + | ||
475 | + | let cP = 225 | |
476 | + | ||
477 | + | let cQ = 400 | |
478 | + | ||
479 | + | let cR = 625 | |
480 | + | ||
481 | + | let cS = [0, 1, 2, 3, 4, 5] | |
482 | + | ||
483 | + | func cT (cU,cV) = valueOrErrorMessage(getString(cU, cV), makeString(["mandatory ", toString(cU), ".", cV, " is not defined"], "")) | |
484 | + | ||
485 | + | ||
486 | + | let cW = 1 | |
487 | + | ||
488 | + | let cX = 2 | |
489 | + | ||
490 | + | let cY = 3 | |
491 | + | ||
492 | + | let cZ = 4 | |
493 | + | ||
494 | + | let da = 7 | |
495 | + | ||
496 | + | let db = 8 | |
497 | + | ||
498 | + | func dc () = "%s__restConfig" | |
499 | + | ||
500 | + | ||
501 | + | func dd () = "%s__restAddr" | |
502 | + | ||
503 | + | ||
504 | + | func de (df) = split_4C(cT(df, dc()), cK) | |
505 | + | ||
506 | + | ||
507 | + | func dg (dh,di) = valueOrErrorMessage(addressFromString(dh[di]), ("Rest cfg doesn't contain address at index " + toString(di))) | |
508 | + | ||
509 | + | ||
510 | + | let dj = addressFromStringValue(valueOrElse(getString(this, dd()), cG)) | |
511 | + | ||
512 | + | let dh = de(dj) | |
513 | + | ||
514 | + | let aq = dg(dh, cW) | |
515 | + | ||
516 | + | let dk = dg(dh, cX) | |
517 | + | ||
518 | + | let dl = dg(dh, cY) | |
519 | + | ||
520 | + | let dm = dg(dh, cZ) | |
521 | + | ||
522 | + | let dn = dg(dh, da) | |
523 | + | ||
524 | + | let do = dg(dh, db) | |
525 | + | ||
526 | + | let dp = 0 | |
527 | + | ||
528 | + | let dq = 1 | |
529 | + | ||
530 | + | let dr = 2 | |
531 | + | ||
532 | + | let ds = 3 | |
533 | + | ||
534 | + | let dt = "wlg_assetId" | |
535 | + | ||
536 | + | let du = valueOrErrorMessage(getBinary(dm, dt), "WLGOLD is not issued yet") | |
537 | + | ||
538 | + | let dv = "acresAssetId" | |
539 | + | ||
540 | + | let dw = valueOrErrorMessage(getBinary(do, dv), "ACRES is not issued yet") | |
541 | + | ||
542 | + | let dx = 2 | |
543 | + | ||
544 | + | func dy (cU) = ("finishBlockForAddr_" + cU) | |
545 | + | ||
546 | + | ||
547 | + | func dz () = "resTypesProportions" | |
548 | + | ||
549 | + | ||
550 | + | func dA (dB) = ("resTypesByContinent_" + dB) | |
551 | + | ||
552 | + | ||
553 | + | func dC (bC) = ("stakedLandsByOwner_" + bC) | |
554 | + | ||
555 | + | ||
556 | + | func dD (bC) = ("stakedPiecesByOwner_" + bC) | |
557 | + | ||
558 | + | ||
559 | + | func dE (dF) = { | |
560 | + | let cF = dF | |
561 | + | if ($isInstanceOf(cF, "String")) | |
558 | 562 | then { | |
559 | - | let | |
560 | - | | |
563 | + | let dG = cF | |
564 | + | dG | |
561 | 565 | } | |
562 | 566 | else throw("fail to cast into String") | |
563 | 567 | } | |
564 | 568 | ||
565 | 569 | ||
566 | - | func | |
567 | - | let | |
568 | - | if ($isInstanceOf( | |
570 | + | func dH (dF) = { | |
571 | + | let cF = dF | |
572 | + | if ($isInstanceOf(cF, "Int")) | |
569 | 573 | then { | |
570 | - | let dG = cD | |
574 | + | let dI = cF | |
575 | + | dI | |
576 | + | } | |
577 | + | else throw("fail to cast into Int") | |
578 | + | } | |
579 | + | ||
580 | + | ||
581 | + | func dJ (dF) = { | |
582 | + | let cF = dF | |
583 | + | if ($isInstanceOf(cF, "List[Any]")) | |
584 | + | then { | |
585 | + | let dK = cF | |
586 | + | dK | |
587 | + | } | |
588 | + | else throw("fail to cast into List[Any]") | |
589 | + | } | |
590 | + | ||
591 | + | ||
592 | + | func dL (dF) = { | |
593 | + | let cF = dF | |
594 | + | if ($isInstanceOf(cF, "Boolean")) | |
595 | + | then { | |
596 | + | let dG = cF | |
571 | 597 | dG | |
572 | 598 | } | |
573 | - | else throw("fail to cast into Int") | |
574 | - | } | |
575 | - | ||
576 | - | ||
577 | - | func dH (dD) = { | |
578 | - | let cD = dD | |
579 | - | if ($isInstanceOf(cD, "List[Any]")) | |
580 | - | then { | |
581 | - | let dI = cD | |
582 | - | dI | |
583 | - | } | |
584 | - | else throw("fail to cast into List[Any]") | |
585 | - | } | |
586 | - | ||
587 | - | ||
588 | - | func dJ (dD) = { | |
589 | - | let cD = dD | |
590 | - | if ($isInstanceOf(cD, "Boolean")) | |
591 | - | then { | |
592 | - | let dE = cD | |
593 | - | dE | |
594 | - | } | |
595 | 599 | else throw("fail to cast into Boolean") | |
596 | 600 | } | |
597 | 601 | ||
598 | 602 | ||
599 | - | func | |
600 | - | let | |
601 | - | if (("S" == | |
602 | - | then | |
603 | - | else if (("M" == | |
604 | - | then | |
605 | - | else if (("L" == | |
606 | - | then | |
607 | - | else if (("XL" == | |
608 | - | then | |
609 | - | else if (("XXL" == | |
610 | - | then | |
603 | + | func dM (dN) = { | |
604 | + | let cF = dN | |
605 | + | if (("S" == cF)) | |
606 | + | then cN | |
607 | + | else if (("M" == cF)) | |
608 | + | then cO | |
609 | + | else if (("L" == cF)) | |
610 | + | then cP | |
611 | + | else if (("XL" == cF)) | |
612 | + | then cQ | |
613 | + | else if (("XXL" == cF)) | |
614 | + | then cR | |
611 | 615 | else throw("Unknown land size") | |
612 | 616 | } | |
613 | 617 | ||
614 | 618 | ||
615 | - | func | |
616 | - | ||
617 | - | ||
618 | - | func | |
619 | - | ||
620 | - | ||
621 | - | func | |
622 | - | ||
623 | - | ||
624 | - | func | |
625 | - | let | |
626 | - | let | |
627 | - | let | |
628 | - | (((toString(( | |
629 | - | } | |
630 | - | ||
631 | - | ||
632 | - | func | |
633 | - | let | |
634 | - | (toInt( | |
635 | - | } | |
636 | - | ||
637 | - | ||
638 | - | let | |
639 | - | let | |
640 | - | if ((base58'2W' == | |
619 | + | func dO (dG) = isDefined(parseInt(dG)) | |
620 | + | ||
621 | + | ||
622 | + | func dP () = "contractsBlocked" | |
623 | + | ||
624 | + | ||
625 | + | func dQ (c) = ("lastTxIdByUser_" + c) | |
626 | + | ||
627 | + | ||
628 | + | func dR (dS,dT) = { | |
629 | + | let dU = pow(10, 0, dT, 0, 0, DOWN) | |
630 | + | let dV = toString((dS % dU)) | |
631 | + | let dW = drop(toString(dU), (1 + size(dV))) | |
632 | + | (((toString((dS / dU)) + ".") + dW) + dV) | |
633 | + | } | |
634 | + | ||
635 | + | ||
636 | + | func dX (dY,dZ,ea) = { | |
637 | + | let eb = sha256((dZ + ea)) | |
638 | + | (toInt(eb) % dY) | |
639 | + | } | |
640 | + | ||
641 | + | ||
642 | + | let ec = { | |
643 | + | let cF = cD | |
644 | + | if ((base58'2W' == cF)) | |
641 | 645 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
642 | - | else if ((base58'2T' == | |
646 | + | else if ((base58'2T' == cF)) | |
643 | 647 | then this | |
644 | 648 | else throw("Unknown chain") | |
645 | 649 | } | |
646 | 650 | ||
647 | - | let | |
648 | - | let | |
649 | - | if ((base58'2W' == | |
651 | + | let ed = { | |
652 | + | let cF = cD | |
653 | + | if ((base58'2W' == cF)) | |
650 | 654 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
651 | - | else if ((base58'2T' == | |
655 | + | else if ((base58'2T' == cF)) | |
652 | 656 | then this | |
653 | 657 | else throw("Unknown chain") | |
654 | 658 | } | |
655 | 659 | ||
656 | - | let | |
657 | - | let | |
658 | - | if ((base58'2W' == | |
659 | - | then if ( | |
660 | + | let ee = { | |
661 | + | let cF = cD | |
662 | + | if ((base58'2W' == cF)) | |
663 | + | then if (cz) | |
660 | 664 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
661 | 665 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
662 | - | else if ((base58'2T' == | |
666 | + | else if ((base58'2T' == cF)) | |
663 | 667 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
664 | 668 | else throw("Unknown chain") | |
665 | 669 | } | |
666 | 670 | ||
667 | - | let | |
668 | - | ||
669 | - | let | |
670 | - | ||
671 | - | let | |
672 | - | ||
673 | - | let | |
674 | - | ||
675 | - | let | |
676 | - | ||
677 | - | let | |
678 | - | let | |
679 | - | if ((base58'2W' == | |
671 | + | let ef = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
672 | + | ||
673 | + | let eg = 300000 | |
674 | + | ||
675 | + | let eh = 5000000 | |
676 | + | ||
677 | + | let ei = 50 | |
678 | + | ||
679 | + | let ej = 10000000 | |
680 | + | ||
681 | + | let ek = { | |
682 | + | let cF = cD | |
683 | + | if ((base58'2W' == cF)) | |
680 | 684 | then 252289527462 | |
681 | - | else if ((base58'2T' == | |
685 | + | else if ((base58'2T' == cF)) | |
682 | 686 | then 2522895274 | |
683 | 687 | else throw("Unknown chain") | |
684 | 688 | } | |
685 | 689 | ||
686 | - | let | |
687 | - | let | |
688 | - | if ((base58'2W' == | |
690 | + | let el = { | |
691 | + | let cF = cD | |
692 | + | if ((base58'2W' == cF)) | |
689 | 693 | then 250000000 | |
690 | - | else if ((base58'2T' == | |
694 | + | else if ((base58'2T' == cF)) | |
691 | 695 | then 250000000 | |
692 | 696 | else throw("Unknown chain") | |
693 | 697 | } | |
694 | 698 | ||
695 | - | let ek = 2500000000 | |
696 | - | ||
697 | - | let el = toBigInt(5) | |
698 | - | ||
699 | - | let em = toBigInt(20) | |
700 | - | ||
701 | - | let en = toBigInt((20 * 20)) | |
702 | - | ||
703 | - | let eo = toBigInt(((20 * 20) * 20)) | |
704 | - | ||
705 | - | let ep = toBigInt((((20 * 20) * 20) * 20)) | |
706 | - | ||
707 | - | let eq = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
708 | - | ||
709 | - | let er = 500 | |
710 | - | ||
711 | - | func es () = "nextLandNum" | |
712 | - | ||
713 | - | ||
714 | - | func et (eu) = ("lcn_" + eu) | |
715 | - | ||
716 | - | ||
717 | - | func ev (ew) = ("la_" + ew) | |
718 | - | ||
719 | - | ||
720 | - | func ex (bu,bB) = ((("ilao_" + bu) + "_") + bB) | |
721 | - | ||
722 | - | ||
723 | - | func ey (ew) = ("lo_" + ew) | |
724 | - | ||
725 | - | ||
726 | - | func ez (eu) = ("duckByCustomName_" + eu) | |
727 | - | ||
728 | - | ||
729 | - | func eA (eu) = ("accountByCustomName_" + eu) | |
730 | - | ||
731 | - | ||
732 | - | func eB () = "oldiesList" | |
733 | - | ||
734 | - | ||
735 | - | let eC = 0 | |
736 | - | ||
737 | - | let eD = 1 | |
738 | - | ||
739 | - | let eE = 2 | |
740 | - | ||
741 | - | let eF = 0 | |
742 | - | ||
743 | - | let eG = 5 | |
744 | - | ||
745 | - | let eH = 6 | |
746 | - | ||
747 | - | let eI = 7 | |
748 | - | ||
749 | - | func eJ (ew,dL) = ((aF + ew) + dL) | |
750 | - | ||
751 | - | ||
752 | - | func eK (eL,eM) = { | |
753 | - | let eN = if ((eL >= 0)) | |
754 | - | then (((eL + eM) - 1) / eM) | |
755 | - | else -((((-(eL) + eM) - 1) / eM)) | |
756 | - | (eN * cK) | |
757 | - | } | |
699 | + | let em = 100000 | |
700 | + | ||
701 | + | let en = 2500000000 | |
702 | + | ||
703 | + | let eo = toBigInt(5) | |
704 | + | ||
705 | + | let ep = toBigInt(20) | |
706 | + | ||
707 | + | let eq = toBigInt((20 * 20)) | |
708 | + | ||
709 | + | let er = toBigInt(((20 * 20) * 20)) | |
710 | + | ||
711 | + | let es = toBigInt((((20 * 20) * 20) * 20)) | |
712 | + | ||
713 | + | let et = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
714 | + | ||
715 | + | let eu = 500 | |
716 | + | ||
717 | + | func ev () = "nextLandNum" | |
718 | + | ||
719 | + | ||
720 | + | func ew (ex) = ("lcn_" + ex) | |
721 | + | ||
722 | + | ||
723 | + | func ey (ez) = ("la_" + ez) | |
724 | + | ||
725 | + | ||
726 | + | func eA (bv,bC) = ((("ilao_" + bv) + "_") + bC) | |
727 | + | ||
728 | + | ||
729 | + | func eB (ez) = ("lo_" + ez) | |
730 | + | ||
731 | + | ||
732 | + | func eC (ex) = ("duckByCustomName_" + ex) | |
733 | + | ||
734 | + | ||
735 | + | func eD (ex) = ("accountByCustomName_" + ex) | |
736 | + | ||
737 | + | ||
738 | + | func eE () = "oldiesList" | |
739 | + | ||
740 | + | ||
741 | + | func eF () = "nextRoboDuck" | |
742 | + | ||
743 | + | ||
744 | + | let eG = 0 | |
745 | + | ||
746 | + | let eH = 1 | |
747 | + | ||
748 | + | let eI = 2 | |
749 | + | ||
750 | + | let eJ = 0 | |
751 | + | ||
752 | + | let eK = 5 | |
753 | + | ||
754 | + | let eL = 6 | |
755 | + | ||
756 | + | let eM = 7 | |
757 | + | ||
758 | + | func eN (ez,dN) = ((aF + ez) + dN) | |
758 | 759 | ||
759 | 760 | ||
760 | 761 | func eO (eP,eQ) = { | |
761 | - | let eR = (((((eQ[0] + eQ[1]) + eQ[2]) + eQ[3]) + eQ[4]) + eQ[5]) | |
762 | - | if ((0 >= eR)) | |
762 | + | let eR = if ((eP >= 0)) | |
763 | + | then (((eP + eQ) - 1) / eQ) | |
764 | + | else -((((-(eP) + eQ) - 1) / eQ)) | |
765 | + | (eR * cM) | |
766 | + | } | |
767 | + | ||
768 | + | ||
769 | + | func eS (eT,eU) = { | |
770 | + | let eV = (((((eU[0] + eU[1]) + eU[2]) + eU[3]) + eU[4]) + eU[5]) | |
771 | + | if ((0 >= eV)) | |
763 | 772 | then throw("Zero weights sum") | |
764 | 773 | else { | |
765 | - | let | |
766 | - | func | |
767 | - | ||
768 | - | let | |
769 | - | let | |
770 | - | let | |
771 | - | func | |
772 | - | then | |
773 | - | else | |
774 | - | ||
775 | - | func | |
776 | - | then | |
774 | + | let eW = fraction(eT, cL, eV) | |
775 | + | func eX (eY,eZ) = (eY :+ fraction(eZ, eW, cL)) | |
776 | + | ||
777 | + | let fa = eU | |
778 | + | let fb = size(fa) | |
779 | + | let fc = nil | |
780 | + | func fd (fe,ff) = if ((ff >= fb)) | |
781 | + | then fe | |
782 | + | else eX(fe, fa[ff]) | |
783 | + | ||
784 | + | func fg (fe,ff) = if ((ff >= fb)) | |
785 | + | then fe | |
777 | 786 | else throw("List size exceeds 6") | |
778 | 787 | ||
779 | - | fc | |
780 | - | } | |
781 | - | } | |
782 | - | ||
783 | - | ||
784 | - | func | |
785 | - | let | |
786 | - | if ((size( | |
788 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
789 | + | } | |
790 | + | } | |
791 | + | ||
792 | + | ||
793 | + | func fh (eT) = { | |
794 | + | let fi = split(value(getString(dz())), "_") | |
795 | + | if ((size(fi) != aJ)) | |
787 | 796 | then throw("Wrong proportions data") | |
788 | 797 | else { | |
789 | - | let | |
790 | - | | |
791 | - | } | |
792 | - | } | |
793 | - | ||
794 | - | ||
795 | - | func | |
796 | - | let | |
797 | - | func | |
798 | - | let | |
799 | - | if ((0 > | |
800 | - | then throw(((((("Not enough material idx=" + toString( | |
801 | - | else ( | |
798 | + | let fj = [parseIntValue(fi[0]), parseIntValue(fi[1]), parseIntValue(fi[2]), parseIntValue(fi[3]), parseIntValue(fi[4]), parseIntValue(fi[5])] | |
799 | + | eS(eT, fj) | |
800 | + | } | |
801 | + | } | |
802 | + | ||
803 | + | ||
804 | + | func fk (fl,fm,fn) = { | |
805 | + | let fo = fh(fn) | |
806 | + | func fp (eY,di) = { | |
807 | + | let fq = (parseIntValue(fm[di]) - fo[di]) | |
808 | + | if ((0 > fq)) | |
809 | + | then throw(((((("Not enough material idx=" + toString(di)) + ", you have ") + fm[di]) + ", but need ") + toString(fo[di]))) | |
810 | + | else (eY :+ toString(fq)) | |
802 | 811 | } | |
803 | 812 | ||
804 | - | if ( | |
813 | + | if (fl) | |
805 | 814 | then { | |
806 | - | let | |
807 | - | let | |
808 | - | let | |
809 | - | func | |
810 | - | then | |
811 | - | else | |
812 | - | ||
813 | - | func | |
814 | - | then | |
815 | + | let fa = cS | |
816 | + | let fb = size(fa) | |
817 | + | let fc = nil | |
818 | + | func fd (fe,ff) = if ((ff >= fb)) | |
819 | + | then fe | |
820 | + | else fp(fe, fa[ff]) | |
821 | + | ||
822 | + | func fg (fe,ff) = if ((ff >= fb)) | |
823 | + | then fe | |
815 | 824 | else throw("List size exceeds 6") | |
816 | 825 | ||
817 | - | fc | |
818 | - | } | |
819 | - | else | |
820 | - | } | |
821 | - | ||
822 | - | ||
823 | - | func | |
824 | - | then $Tuple2( | |
826 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
827 | + | } | |
828 | + | else fm | |
829 | + | } | |
830 | + | ||
831 | + | ||
832 | + | func fr (fs,ft) = if ((ft == "")) | |
833 | + | then $Tuple2(fs, false) | |
825 | 834 | else { | |
826 | - | func | |
827 | - | let | |
828 | - | if ((size( | |
835 | + | func fu (eY,fv) = { | |
836 | + | let fw = split(fv, ",") | |
837 | + | if ((size(fw) != 2)) | |
829 | 838 | then throw("Incorrect format, should be index,amount") | |
830 | 839 | else { | |
831 | - | let | |
832 | - | if (if ((0 > | |
840 | + | let di = parseIntValue(fw[0]) | |
841 | + | if (if ((0 > di)) | |
833 | 842 | then true | |
834 | - | else ( | |
843 | + | else (di >= size(aY))) | |
835 | 844 | then throw("Unknown product idx") | |
836 | 845 | else { | |
837 | - | let | |
838 | - | let | |
839 | - | if ((size( | |
840 | - | then throw((("You don't have " + | |
846 | + | let fx = parseIntValue(fw[1]) | |
847 | + | let fy = split(eY._1, (fw[0] + ":")) | |
848 | + | if ((size(fy) != 2)) | |
849 | + | then throw((("You don't have " + aU[di]) + " equipped")) | |
841 | 850 | else { | |
842 | - | let | |
843 | - | let | |
851 | + | let fz = fy[1] | |
852 | + | let fA = if (dO(take(drop(fz, 1), 1))) | |
844 | 853 | then 2 | |
845 | 854 | else 1 | |
846 | - | let | |
847 | - | let | |
848 | - | let | |
849 | - | then ( | |
850 | - | else throw(((((("You equipped " + toString( | |
851 | - | $Tuple2((((( | |
855 | + | let fB = parseIntValue(take(fz, fA)) | |
856 | + | let fC = drop(fz, fA) | |
857 | + | let fD = if ((fB >= fx)) | |
858 | + | then (fB - fx) | |
859 | + | else throw(((((("You equipped " + toString(fB)) + " of ") + aU[di]) + ", but tried to use ") + toString(fx))) | |
860 | + | $Tuple2(((((fy[0] + fw[0]) + ":") + toString(fD)) + fC), if (eY._2) | |
852 | 861 | then true | |
853 | - | else if (if (( | |
854 | - | then (8 >= | |
862 | + | else if (if ((di >= 6)) | |
863 | + | then (8 >= di) | |
855 | 864 | else false) | |
856 | - | then ( | |
865 | + | then (fD == 0) | |
857 | 866 | else false) | |
858 | 867 | } | |
859 | 868 | } | |
860 | 869 | } | |
861 | 870 | } | |
862 | 871 | ||
863 | - | let | |
864 | - | let | |
865 | - | let | |
866 | - | func | |
867 | - | then | |
868 | - | else | |
869 | - | ||
870 | - | func | |
871 | - | then | |
872 | + | let fa = split(ft, "_") | |
873 | + | let fb = size(fa) | |
874 | + | let fc = $Tuple2(fs, false) | |
875 | + | func fd (fe,ff) = if ((ff >= fb)) | |
876 | + | then fe | |
877 | + | else fu(fe, fa[ff]) | |
878 | + | ||
879 | + | func fg (fe,ff) = if ((ff >= fb)) | |
880 | + | then fe | |
872 | 881 | else throw("List size exceeds 10") | |
873 | 882 | ||
874 | - | fc | |
883 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
875 | 884 | } | |
876 | 885 | ||
877 | 886 | ||
878 | - | func | |
879 | - | let | |
887 | + | func fE (fF) = { | |
888 | + | let fG = if ((fF == "")) | |
880 | 889 | then nil | |
881 | - | else split_4C( | |
882 | - | func | |
883 | - | let | |
884 | - | let | |
885 | - | then parseIntValue( | |
890 | + | else split_4C(fF, "_") | |
891 | + | func fH (eY,cu) = { | |
892 | + | let fI = (size(eY) / 8) | |
893 | + | let fB = if ((size(fG) > fI)) | |
894 | + | then parseIntValue(fG[fI]) | |
886 | 895 | else 0 | |
887 | - | ( | |
896 | + | (eY + toBytes(fB)) | |
888 | 897 | } | |
889 | 898 | ||
890 | - | let | |
891 | - | let | |
892 | - | let | |
893 | - | func | |
894 | - | then | |
895 | - | else | |
896 | - | ||
897 | - | func | |
898 | - | then | |
899 | + | let fa = aY | |
900 | + | let fb = size(fa) | |
901 | + | let fc = base58'' | |
902 | + | func fd (fe,ff) = if ((ff >= fb)) | |
903 | + | then fe | |
904 | + | else fH(fe, fa[ff]) | |
905 | + | ||
906 | + | func fg (fe,ff) = if ((ff >= fb)) | |
907 | + | then fe | |
899 | 908 | else throw("List size exceeds 50") | |
900 | 909 | ||
901 | - | fc | |
902 | - | } | |
903 | - | ||
904 | - | ||
905 | - | func | |
906 | - | func | |
907 | - | let | |
908 | - | let | |
909 | - | ( | |
910 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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) | |
911 | + | } | |
912 | + | ||
913 | + | ||
914 | + | func fJ (fK) = { | |
915 | + | func fL (eY,cu) = { | |
916 | + | let fI = size(eY) | |
917 | + | let fM = take(drop(fK, (8 * fI)), 8) | |
918 | + | (eY :+ toString(toInt(fM))) | |
910 | 919 | } | |
911 | 920 | ||
912 | 921 | makeString_2C({ | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | func | |
917 | - | then | |
918 | - | else | |
919 | - | ||
920 | - | func | |
921 | - | then | |
922 | + | let fa = aY | |
923 | + | let fb = size(fa) | |
924 | + | let fc = nil | |
925 | + | func fd (fe,ff) = if ((ff >= fb)) | |
926 | + | then fe | |
927 | + | else fL(fe, fa[ff]) | |
928 | + | ||
929 | + | func fg (fe,ff) = if ((ff >= fb)) | |
930 | + | then fe | |
922 | 931 | else throw("List size exceeds 50") | |
923 | 932 | ||
924 | - | fc | |
933 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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) | |
925 | 934 | }, "_") | |
926 | 935 | } | |
927 | 936 | ||
928 | 937 | ||
929 | - | func | |
930 | - | func | |
931 | - | let | |
932 | - | then | |
938 | + | func fN (fO,fP) = { | |
939 | + | func fQ (eY,fI) = { | |
940 | + | let fR = if ((size(fO) > (7 + fI))) | |
941 | + | then fO[(7 + fI)] | |
933 | 942 | else 0 | |
934 | - | if ((parseIntValue( | |
935 | - | then throw(("Requirement not satisfied: " + k[ | |
943 | + | if ((parseIntValue(fP[fI]) > (fO[fI] + fR))) | |
944 | + | then throw(("Requirement not satisfied: " + k[fI])) | |
936 | 945 | else true | |
937 | 946 | } | |
938 | 947 | ||
939 | - | let | |
940 | - | let | |
941 | - | let | |
942 | - | func | |
943 | - | then | |
944 | - | else | |
945 | - | ||
946 | - | func | |
947 | - | then | |
948 | + | let fa = [0, 1, 2, 3, 4, 5, 6] | |
949 | + | let fb = size(fa) | |
950 | + | let fc = false | |
951 | + | func fd (fe,ff) = if ((ff >= fb)) | |
952 | + | then fe | |
953 | + | else fQ(fe, fa[ff]) | |
954 | + | ||
955 | + | func fg (fe,ff) = if ((ff >= fb)) | |
956 | + | then fe | |
948 | 957 | else throw("List size exceeds 7") | |
949 | 958 | ||
950 | - | fc | |
951 | - | } | |
952 | - | ||
953 | - | ||
954 | - | func | |
955 | - | let | |
956 | - | if ((size( | |
959 | + | fg(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7) | |
960 | + | } | |
961 | + | ||
962 | + | ||
963 | + | func fS (fT,fG,fU,fO,fV,fW) = { | |
964 | + | let fw = split(fT, ":") | |
965 | + | if ((size(fw) != 2)) | |
957 | 966 | then throw("Incorrect format, should be index:amount") | |
958 | - | else if (if (!( | |
959 | - | then (size( | |
967 | + | else if (if (!(fU)) | |
968 | + | then (size(fw[0]) != 2) | |
960 | 969 | else false) | |
961 | 970 | then throw("Product idx should be 2 digits, zero padded") | |
962 | 971 | else { | |
963 | - | let | |
964 | - | let | |
965 | - | if (!(containsElement( | |
966 | - | then throw((("Product '" + | |
967 | - | else if ((0 > | |
972 | + | let fX = parseIntValue(fw[0]) | |
973 | + | let fY = parseIntValue(fw[1]) | |
974 | + | if (!(containsElement(aX, fX))) | |
975 | + | then throw((("Product '" + aU[fX]) + "' cannot be used for land defense")) | |
976 | + | else if ((0 > fY)) | |
968 | 977 | then throw("Count can't be negative") | |
969 | - | else if (( | |
970 | - | then throw(((("Can't put more than " + toString(u)) + " of ") + | |
971 | - | else if (( | |
972 | - | then $Tuple3( | |
978 | + | else if ((fY > u)) | |
979 | + | then throw(((("Can't put more than " + toString(u)) + " of ") + aU[fX])) | |
980 | + | else if ((fY == 0)) | |
981 | + | then $Tuple3(fG, fV, fW) | |
973 | 982 | else { | |
974 | - | let | |
975 | - | let | |
976 | - | let | |
977 | - | let | |
978 | - | if (if (!( | |
979 | - | then ( | |
983 | + | let fZ = take(fG, (8 * fX)) | |
984 | + | let fB = toInt(take(drop(fG, (8 * fX)), 8)) | |
985 | + | let fC = drop(fG, (8 * (fX + 1))) | |
986 | + | let cu = split(aY[fX], "_") | |
987 | + | if (if (!(fU)) | |
988 | + | then (fY > fB) | |
980 | 989 | else false) | |
981 | - | then throw(((((("You have " + toString( | |
990 | + | then throw(((((("You have " + toString(fB)) + " of ") + aU[fX]) + ", but tried to use ") + toString(fY))) | |
982 | 991 | else { | |
983 | - | let | |
984 | - | then | |
992 | + | let fD = if (if (!(fU)) | |
993 | + | then fN(fO, split(cu[bb], ",")) | |
985 | 994 | else false) | |
986 | - | then ( | |
987 | - | else ( | |
988 | - | let | |
989 | - | $Tuple3((( | |
995 | + | then (fB - fY) | |
996 | + | else (fB + fY) | |
997 | + | let ga = (eO(fD, bd) - eO(fB, bd)) | |
998 | + | $Tuple3(((fZ + toBytes(fD)) + fC), (fV + ga), (fW - ga)) | |
990 | 999 | } | |
991 | 1000 | } | |
992 | 1001 | } | |
993 | 1002 | } | |
994 | 1003 | ||
995 | 1004 | ||
996 | - | func | |
997 | - | let | |
998 | - | if ((size( | |
1005 | + | func gb (fT,fG,fU,gc,gd,ge,fO) = { | |
1006 | + | let fw = split(fT, ":") | |
1007 | + | if ((size(fw) != 2)) | |
999 | 1008 | then throw("Incorrect format, should be index:amount") | |
1000 | - | else if (if (!( | |
1001 | - | then (size( | |
1009 | + | else if (if (!(fU)) | |
1010 | + | then (size(fw[0]) != 2) | |
1002 | 1011 | else false) | |
1003 | 1012 | then throw("Product idx should be 2 digits, zero padded") | |
1004 | 1013 | else { | |
1005 | - | let | |
1006 | - | let | |
1007 | - | if (if ((0 > | |
1014 | + | let fX = parseIntValue(fw[0]) | |
1015 | + | let fY = parseIntValue(fw[1]) | |
1016 | + | if (if ((0 > fX)) | |
1008 | 1017 | then true | |
1009 | - | else ( | |
1018 | + | else (fX >= size(aY))) | |
1010 | 1019 | then throw("Unknown product idx") | |
1011 | - | else if ((0 > | |
1020 | + | else if ((0 > fY)) | |
1012 | 1021 | then throw("Count can't be negative") | |
1013 | - | else if (( | |
1014 | - | then throw(((("Can't put more than " + toString(u)) + " of ") + | |
1015 | - | else if (( | |
1016 | - | then $Tuple2( | |
1022 | + | else if ((fY > u)) | |
1023 | + | then throw(((("Can't put more than " + toString(u)) + " of ") + aU[fX])) | |
1024 | + | else if ((fY == 0)) | |
1025 | + | then $Tuple2(fG, false) | |
1017 | 1026 | else { | |
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | if (if (!( | |
1023 | - | then ( | |
1027 | + | let fZ = take(fG, (8 * fX)) | |
1028 | + | let fB = toInt(take(drop(fG, (8 * fX)), 8)) | |
1029 | + | let fC = drop(fG, (8 * (fX + 1))) | |
1030 | + | let cu = split(aY[fX], "_") | |
1031 | + | if (if (!(fU)) | |
1032 | + | then (fY > fB) | |
1024 | 1033 | else false) | |
1025 | - | then throw(((((("You have " + toString( | |
1034 | + | then throw(((((("You have " + toString(fB)) + " of ") + aU[fX]) + ", but tried to use ") + toString(fY))) | |
1026 | 1035 | else { | |
1027 | - | let | |
1028 | - | then | |
1036 | + | let gf = if (if (!(fU)) | |
1037 | + | then fN(fO, split(cu[bb], ",")) | |
1029 | 1038 | else false) | |
1030 | 1039 | then { | |
1031 | - | let | |
1032 | - | if (( | |
1040 | + | let gg = cu[bc] | |
1041 | + | if ((gg == "")) | |
1033 | 1042 | then throw("Item cannot be equipped") | |
1034 | 1043 | else { | |
1035 | - | let | |
1036 | - | let | |
1037 | - | if (( | |
1044 | + | let gh = parseIntValue(gg) | |
1045 | + | let gi = (gh / 100) | |
1046 | + | if ((gc != gi)) | |
1038 | 1047 | then throw("Segment incompatible") | |
1039 | 1048 | else { | |
1040 | - | let | |
1041 | - | if (( | |
1049 | + | let gj = ((gh % 100) / 10) | |
1050 | + | if ((gd != gj)) | |
1042 | 1051 | then throw("Slot incompatible") | |
1043 | 1052 | else { | |
1044 | - | let | |
1045 | - | if (if (( | |
1046 | - | then ( | |
1053 | + | let gk = (gh % 10) | |
1054 | + | if (if ((ge != 0)) | |
1055 | + | then (gk > 1) | |
1047 | 1056 | else false) | |
1048 | 1057 | then throw("Big items should occupy slot 0") | |
1049 | - | else ( | |
1058 | + | else (gk > 1) | |
1050 | 1059 | } | |
1051 | 1060 | } | |
1052 | 1061 | } | |
1053 | 1062 | } | |
1054 | 1063 | else false | |
1055 | - | $Tuple2((( | |
1056 | - | then | |
1057 | - | else -( | |
1064 | + | $Tuple2(((fZ + toBytes((fB + (if (fU) | |
1065 | + | then fY | |
1066 | + | else -(fY))))) + fC), gf) | |
1058 | 1067 | } | |
1059 | 1068 | } | |
1060 | 1069 | } | |
1061 | 1070 | } | |
1062 | 1071 | ||
1063 | 1072 | ||
1064 | - | func | |
1073 | + | func gl (gm,gn,fU,gc,gd,go) = if ((gm != "")) | |
1065 | 1074 | then { | |
1066 | - | let | |
1067 | - | if ((size( | |
1075 | + | let gp = split(gm, ",") | |
1076 | + | if ((size(gp) > t)) | |
1068 | 1077 | then throw("Wrong slots format") | |
1069 | 1078 | else { | |
1070 | - | let | |
1071 | - | let | |
1072 | - | then | |
1079 | + | let gq = gp[0] | |
1080 | + | let gr = if ((size(gp) > 1)) | |
1081 | + | then gp[1] | |
1073 | 1082 | else "" | |
1074 | - | if (if (( | |
1075 | - | then ( | |
1083 | + | if (if ((gq == "")) | |
1084 | + | then (gr == "") | |
1076 | 1085 | else false) | |
1077 | - | then | |
1086 | + | then gn | |
1078 | 1087 | else { | |
1079 | - | let | |
1080 | - | then | |
1081 | - | else $Tuple2( | |
1082 | - | if (( | |
1083 | - | then if ( | |
1088 | + | let gs = if ((gq != "")) | |
1089 | + | then gb(gq, gn, fU, gc, gd, 0, go) | |
1090 | + | else $Tuple2(gn, false) | |
1091 | + | if ((gr != "")) | |
1092 | + | then if (gs._2) | |
1084 | 1093 | then throw("Big item already occupies slot") | |
1085 | - | else | |
1086 | - | else | |
1094 | + | else gb(gr, gs._1, fU, gc, gd, 1, go)._1 | |
1095 | + | else gs._1 | |
1087 | 1096 | } | |
1088 | 1097 | } | |
1089 | 1098 | } | |
1090 | - | else | |
1091 | - | ||
1092 | - | ||
1093 | - | func | |
1094 | - | func | |
1095 | - | let | |
1096 | - | let | |
1097 | - | if ((size( | |
1099 | + | else gn | |
1100 | + | ||
1101 | + | ||
1102 | + | func gt (gu,gv,fU,go) = { | |
1103 | + | func gc (eY,gw) = { | |
1104 | + | let fI = eY._1 | |
1105 | + | let gd = split(gw, ";") | |
1106 | + | if ((size(gd) != s)) | |
1098 | 1107 | then throw("Wrong segment format") | |
1099 | 1108 | else { | |
1100 | - | let | |
1101 | - | let | |
1102 | - | if (if (( | |
1103 | - | then ( | |
1109 | + | let gx = gd[0] | |
1110 | + | let gy = gd[1] | |
1111 | + | if (if ((gx == "")) | |
1112 | + | then (gy == "") | |
1104 | 1113 | else false) | |
1105 | - | then $Tuple2(( | |
1114 | + | then $Tuple2((fI + 1), eY._2) | |
1106 | 1115 | else { | |
1107 | - | let | |
1108 | - | $Tuple2(( | |
1116 | + | let gz = gl(gx, eY._2, fU, fI, 0, go) | |
1117 | + | $Tuple2((fI + 1), gl(gy, gz, fU, fI, 1, go)) | |
1109 | 1118 | } | |
1110 | 1119 | } | |
1111 | 1120 | } | |
1112 | 1121 | ||
1113 | - | ( let | |
1114 | - | let | |
1115 | - | let | |
1116 | - | func | |
1117 | - | then | |
1118 | - | else | |
1119 | - | ||
1120 | - | func | |
1121 | - | then | |
1122 | + | ( let fa = gu | |
1123 | + | let fb = size(fa) | |
1124 | + | let fc = $Tuple2(0, gv) | |
1125 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1126 | + | then fe | |
1127 | + | else gc(fe, fa[ff]) | |
1128 | + | ||
1129 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1130 | + | then fe | |
1122 | 1131 | else throw("List size exceeds 6") | |
1123 | 1132 | ||
1124 | - | fc | |
1125 | - | } | |
1126 | - | ||
1127 | - | ||
1128 | - | func | |
1133 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6))._2 | |
1134 | + | } | |
1135 | + | ||
1136 | + | ||
1137 | + | func gA (gu,gv,fV,fW,fU,fO) = if ((3 > size(gu))) | |
1129 | 1138 | then throw("At least duck, mines and traps parts are required") | |
1130 | 1139 | else { | |
1131 | - | func | |
1132 | - | let | |
1133 | - | if (( | |
1134 | - | then $Tuple4(( | |
1140 | + | func gc (eY,gw) = { | |
1141 | + | let fI = eY._1 | |
1142 | + | if ((fI == 0)) | |
1143 | + | then $Tuple4((fI + 1), eY._2, eY._3, eY._4) | |
1135 | 1144 | else { | |
1136 | - | let | |
1137 | - | $Tuple4(( | |
1145 | + | let gB = fS(gw, eY._2, fU, fO, eY._3, eY._4) | |
1146 | + | $Tuple4((fI + 1), gB._1, gB._2, gB._3) | |
1138 | 1147 | } | |
1139 | 1148 | } | |
1140 | 1149 | ||
1141 | - | let | |
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | func | |
1146 | - | then | |
1147 | - | else | |
1148 | - | ||
1149 | - | func | |
1150 | - | then | |
1150 | + | let gC = { | |
1151 | + | let fa = gu | |
1152 | + | let fb = size(fa) | |
1153 | + | let fc = $Tuple4(0, gv, fV, fW) | |
1154 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1155 | + | then fe | |
1156 | + | else gc(fe, fa[ff]) | |
1157 | + | ||
1158 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1159 | + | then fe | |
1151 | 1160 | else throw("List size exceeds 10") | |
1152 | 1161 | ||
1153 | - | fc | |
1154 | - | } | |
1155 | - | $Tuple3( | |
1162 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1163 | + | } | |
1164 | + | $Tuple3(gC._2, gC._3, gC._4) | |
1156 | 1165 | } | |
1157 | 1166 | ||
1158 | 1167 | ||
1159 | - | func | |
1160 | - | let | |
1161 | - | let | |
1162 | - | let | |
1163 | - | let | |
1164 | - | let ar = if (( | |
1168 | + | func gD (B) = { | |
1169 | + | let gE = G(B) | |
1170 | + | let gF = split(valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1171 | + | let gG = gt(gF, ef, true, nil) | |
1172 | + | let gH = split(gF[q], ";")[1] | |
1173 | + | let ar = if ((gH == "")) | |
1165 | 1174 | then 0 | |
1166 | 1175 | else { | |
1167 | - | let | |
1168 | - | if (( | |
1176 | + | let gI = split(gH, ",")[0] | |
1177 | + | if ((gI == "")) | |
1169 | 1178 | then 0 | |
1170 | 1179 | else { | |
1171 | - | let | |
1172 | - | let | |
1173 | - | let | |
1174 | - | if (if (if (if (if (( | |
1180 | + | let fT = split(gI, ":") | |
1181 | + | let di = fT[0] | |
1182 | + | let gJ = fT[1] | |
1183 | + | if (if (if (if (if ((di == "06")) | |
1175 | 1184 | then true | |
1176 | - | else ( | |
1185 | + | else (di == "07")) | |
1177 | 1186 | then true | |
1178 | - | else ( | |
1179 | - | then ( | |
1187 | + | else (di == "08")) | |
1188 | + | then (gJ != "") | |
1180 | 1189 | else false) | |
1181 | - | then (parseIntValue( | |
1190 | + | then (parseIntValue(gJ) > 0) | |
1182 | 1191 | else false) | |
1183 | - | then parseIntValue(split( | |
1192 | + | then parseIntValue(split(aY[parseIntValue(di)], "_")[ba]) | |
1184 | 1193 | else 0 | |
1185 | 1194 | } | |
1186 | 1195 | } | |
1187 | - | let | |
1188 | - | let | |
1189 | - | ( | |
1190 | - | } | |
1191 | - | ||
1192 | - | ||
1193 | - | func | |
1196 | + | let go = ap(this, B, ar, true) | |
1197 | + | let gK = gt(gF, gG, false, go) | |
1198 | + | (gK == gK) | |
1199 | + | } | |
1200 | + | ||
1201 | + | ||
1202 | + | func gL (gM,gN,gO,gP) = if ((size(gM) != aJ)) | |
1194 | 1203 | then throw("Wrong proportions data") | |
1195 | 1204 | else { | |
1196 | - | func | |
1197 | - | let | |
1198 | - | if ((0 > | |
1199 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1200 | - | else ( | |
1201 | - | } | |
1202 | - | ||
1203 | - | let | |
1204 | - | let | |
1205 | - | let | |
1206 | - | func | |
1207 | - | then | |
1208 | - | else | |
1209 | - | ||
1210 | - | func | |
1211 | - | then | |
1205 | + | func gQ (eY,gR) = { | |
1206 | + | let fq = (parseIntValue(gM[gR]) + ((gP * gN[gR]) * gO)) | |
1207 | + | if ((0 > fq)) | |
1208 | + | then throw(((((((("Panic! Pieces of type=" + toString(gR)) + ", sign=") + toString(gP)) + ", terrainCounts[i]=") + toString(gN[gR])) + ", landSizeIndex=") + toString(gO))) | |
1209 | + | else (eY :+ toString(fq)) | |
1210 | + | } | |
1211 | + | ||
1212 | + | let fa = cS | |
1213 | + | let fb = size(fa) | |
1214 | + | let fc = nil | |
1215 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1216 | + | then fe | |
1217 | + | else gQ(fe, fa[ff]) | |
1218 | + | ||
1219 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1220 | + | then fe | |
1212 | 1221 | else throw("List size exceeds 6") | |
1213 | 1222 | ||
1214 | - | fc | |
1223 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1215 | 1224 | } | |
1216 | 1225 | ||
1217 | 1226 | ||
1218 | - | func | |
1219 | - | let | |
1220 | - | makeString( | |
1221 | - | } | |
1222 | - | ||
1223 | - | ||
1224 | - | func | |
1225 | - | ||
1226 | - | ||
1227 | - | func | |
1228 | - | func | |
1229 | - | let | |
1230 | - | ( | |
1227 | + | func gS (gN,gO,gP) = { | |
1228 | + | let gM = split(valueOrElse(getString(dz()), "0_0_0_0_0_0"), "_") | |
1229 | + | makeString(gL(gM, gN, gO, gP), "_") | |
1230 | + | } | |
1231 | + | ||
1232 | + | ||
1233 | + | func gT (gU) = [(size(split(gU, "A")) - 1), (size(split(gU, "B")) - 1), (size(split(gU, "C")) - 1), (size(split(gU, "D")) - 1), (size(split(gU, "E")) - 1), (size(split(gU, "F")) - 1)] | |
1234 | + | ||
1235 | + | ||
1236 | + | func gV (gW,gN,gX,gO,gY) = { | |
1237 | + | func gZ (eY,gR) = { | |
1238 | + | let ha = ((fraction(gX, gY, a) * gN[gR]) * gO) | |
1239 | + | (eY :+ toString((parseIntValue(gW[gR]) + ha))) | |
1231 | 1240 | } | |
1232 | 1241 | ||
1233 | - | let | |
1234 | - | let | |
1235 | - | let | |
1236 | - | let | |
1237 | - | func | |
1238 | - | then | |
1239 | - | else | |
1240 | - | ||
1241 | - | func | |
1242 | - | then | |
1242 | + | let fj = { | |
1243 | + | let fa = cS | |
1244 | + | let fb = size(fa) | |
1245 | + | let fc = nil | |
1246 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1247 | + | then fe | |
1248 | + | else gZ(fe, fa[ff]) | |
1249 | + | ||
1250 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1251 | + | then fe | |
1243 | 1252 | else throw("List size exceeds 6") | |
1244 | 1253 | ||
1245 | - | fc | |
1254 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1246 | 1255 | } | |
1247 | - | makeString( | |
1248 | - | } | |
1249 | - | ||
1250 | - | ||
1251 | - | func | |
1252 | - | func | |
1253 | - | let | |
1254 | - | $Tuple2(( | |
1256 | + | makeString(fj, "_") | |
1257 | + | } | |
1258 | + | ||
1259 | + | ||
1260 | + | func hb (gN,gX,gO,gY) = { | |
1261 | + | func gZ (eY,gR) = { | |
1262 | + | let ha = ((fraction(gX, gY, a) * gN[gR]) * gO) | |
1263 | + | $Tuple2((eY._1 :+ ha), (eY._2 + ha)) | |
1255 | 1264 | } | |
1256 | 1265 | ||
1257 | - | let | |
1258 | - | let | |
1259 | - | let | |
1260 | - | func | |
1261 | - | then | |
1262 | - | else | |
1263 | - | ||
1264 | - | func | |
1265 | - | then | |
1266 | + | let fa = cS | |
1267 | + | let fb = size(fa) | |
1268 | + | let fc = $Tuple2(nil, 0) | |
1269 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1270 | + | then fe | |
1271 | + | else gZ(fe, fa[ff]) | |
1272 | + | ||
1273 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1274 | + | then fe | |
1266 | 1275 | else throw("List size exceeds 6") | |
1267 | 1276 | ||
1268 | - | fc | |
1269 | - | } | |
1270 | - | ||
1271 | - | ||
1272 | - | func | |
1273 | - | let | |
1274 | - | let | |
1275 | - | if (( | |
1276 | - | then $Tuple2(makeString( | |
1277 | - | else if (( | |
1277 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1278 | + | } | |
1279 | + | ||
1280 | + | ||
1281 | + | func hc (hd,he,hf,hg) = { | |
1282 | + | let hh = hf._1 | |
1283 | + | let hi = hf._2 | |
1284 | + | if ((hi == 0)) | |
1285 | + | then $Tuple2(makeString(hd, "_"), makeString(he, "_")) | |
1286 | + | else if ((hg >= hi)) | |
1278 | 1287 | then { | |
1279 | - | func | |
1280 | - | ||
1281 | - | let | |
1282 | - | let | |
1283 | - | let | |
1284 | - | let | |
1285 | - | func | |
1286 | - | then | |
1287 | - | else | |
1288 | - | ||
1289 | - | func | |
1290 | - | then | |
1288 | + | func hj (eY,gR) = (eY :+ toString((parseIntValue(hd[gR]) + hh[gR]))) | |
1289 | + | ||
1290 | + | let fj = { | |
1291 | + | let fa = cS | |
1292 | + | let fb = size(fa) | |
1293 | + | let fc = nil | |
1294 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1295 | + | then fe | |
1296 | + | else hj(fe, fa[ff]) | |
1297 | + | ||
1298 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1299 | + | then fe | |
1291 | 1300 | else throw("List size exceeds 6") | |
1292 | 1301 | ||
1293 | - | fc | |
1302 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1294 | 1303 | } | |
1295 | - | $Tuple2(makeString( | |
1304 | + | $Tuple2(makeString(fj, "_"), makeString(he, "_")) | |
1296 | 1305 | } | |
1297 | 1306 | else { | |
1298 | - | func | |
1299 | - | let | |
1300 | - | $Tuple2(( | |
1307 | + | func hk (eY,gR) = { | |
1308 | + | let hl = fraction(hh[gR], hg, hi) | |
1309 | + | $Tuple2((eY._1 :+ toString((parseIntValue(hd[gR]) + hl))), (eY._2 :+ toString(((parseIntValue(he[gR]) + hh[gR]) - hl)))) | |
1301 | 1310 | } | |
1302 | 1311 | ||
1303 | - | let | |
1304 | - | let | |
1305 | - | let | |
1306 | - | let | |
1307 | - | func | |
1308 | - | then | |
1309 | - | else | |
1310 | - | ||
1311 | - | func | |
1312 | - | then | |
1312 | + | let fj = { | |
1313 | + | let fa = cS | |
1314 | + | let fb = size(fa) | |
1315 | + | let fc = $Tuple2(nil, nil) | |
1316 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1317 | + | then fe | |
1318 | + | else hk(fe, fa[ff]) | |
1319 | + | ||
1320 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1321 | + | then fe | |
1313 | 1322 | else throw("List size exceeds 6") | |
1314 | 1323 | ||
1315 | - | fc | |
1324 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1316 | 1325 | } | |
1317 | - | $Tuple2(makeString( | |
1326 | + | $Tuple2(makeString(fj._1, "_"), makeString(fj._2, "_")) | |
1318 | 1327 | } | |
1319 | 1328 | } | |
1320 | 1329 | ||
1321 | 1330 | ||
1322 | - | func | |
1323 | - | then | |
1324 | - | else -( | |
1325 | - | ||
1326 | - | ||
1327 | - | let | |
1328 | - | ||
1329 | - | func | |
1330 | - | let | |
1331 | - | let | |
1331 | + | func hm (hn) = if ((hn >= toBigInt(0))) | |
1332 | + | then hn | |
1333 | + | else -(hn) | |
1334 | + | ||
1335 | + | ||
1336 | + | let ho = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
1337 | + | ||
1338 | + | func hp (dI,hq) = { | |
1339 | + | let hr = toInt((dI % ep)) | |
1340 | + | let hs = if ((hq[0] > hr)) | |
1332 | 1341 | then "A" | |
1333 | - | else if (( | |
1342 | + | else if ((hq[1] > hr)) | |
1334 | 1343 | then "B" | |
1335 | - | else if (( | |
1344 | + | else if ((hq[2] > hr)) | |
1336 | 1345 | then "C" | |
1337 | - | else if (( | |
1346 | + | else if ((hq[3] > hr)) | |
1338 | 1347 | then "D" | |
1339 | - | else if (( | |
1348 | + | else if ((hq[4] > hr)) | |
1340 | 1349 | then "E" | |
1341 | 1350 | else "F" | |
1342 | - | | |
1343 | - | } | |
1344 | - | ||
1345 | - | ||
1346 | - | func | |
1347 | - | let | |
1348 | - | func | |
1349 | - | ||
1350 | - | let | |
1351 | - | let | |
1352 | - | let | |
1353 | - | let | |
1354 | - | func | |
1355 | - | then | |
1356 | - | else | |
1357 | - | ||
1358 | - | func | |
1359 | - | then | |
1351 | + | hs | |
1352 | + | } | |
1353 | + | ||
1354 | + | ||
1355 | + | func ht (hu,hv) = { | |
1356 | + | let hw = ho[hv] | |
1357 | + | func hx (eY,eZ) = $Tuple2((((((eY._1 + hp(eY._2, hw)) + hp((eY._2 / ep), hw)) + hp((eY._2 / eq), hw)) + hp((eY._2 / er), hw)) + hp((eY._2 / es), hw)), (eY._2 / et)) | |
1358 | + | ||
1359 | + | let gC = { | |
1360 | + | let fa = [1, 2, 3, 4, 5] | |
1361 | + | let fb = size(fa) | |
1362 | + | let fc = $Tuple2("", (hu / eo)) | |
1363 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1364 | + | then fe | |
1365 | + | else hx(fe, fa[ff]) | |
1366 | + | ||
1367 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1368 | + | then fe | |
1360 | 1369 | else throw("List size exceeds 5") | |
1361 | 1370 | ||
1362 | - | fc | |
1371 | + | fg(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5) | |
1363 | 1372 | } | |
1364 | - | | |
1365 | - | } | |
1366 | - | ||
1367 | - | ||
1368 | - | let | |
1369 | - | ||
1370 | - | let | |
1371 | - | ||
1372 | - | func | |
1373 | - | func | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1373 | + | gC._1 | |
1374 | + | } | |
1375 | + | ||
1376 | + | ||
1377 | + | let hy = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14] | |
1378 | + | ||
1379 | + | let hz = ["A", "B", "C", "D", "E", "F"] | |
1380 | + | ||
1381 | + | func hA (hB,gO) = { | |
1382 | + | func hC (eY,dG) = { | |
1383 | + | let fI = eY._2 | |
1384 | + | let hD = parseIntValue(dG) | |
1385 | + | let hn = if ((hD == 0)) | |
1377 | 1386 | then 0 | |
1378 | - | else if (( | |
1379 | - | then ( | |
1380 | - | else if (( | |
1387 | + | else if ((hD >= (4 * gO))) | |
1388 | + | then (hD / gO) | |
1389 | + | else if ((hD > (3 * gO))) | |
1381 | 1390 | then 3 | |
1382 | - | else ((( | |
1383 | - | $Tuple3(( | |
1391 | + | else (((hD - 1) / gO) + 1) | |
1392 | + | $Tuple3((eY._1 :+ hn), (eY._2 + 1), (eY._3 + hn)) | |
1384 | 1393 | } | |
1385 | 1394 | ||
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | let | |
1390 | - | func | |
1391 | - | then | |
1392 | - | else | |
1393 | - | ||
1394 | - | func | |
1395 | - | then | |
1395 | + | let gC = { | |
1396 | + | let fa = hB | |
1397 | + | let fb = size(fa) | |
1398 | + | let fc = $Tuple3(nil, 0, 0) | |
1399 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1400 | + | then fe | |
1401 | + | else hC(fe, fa[ff]) | |
1402 | + | ||
1403 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1404 | + | then fe | |
1396 | 1405 | else throw("List size exceeds 6") | |
1397 | 1406 | ||
1398 | - | fc | |
1407 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1399 | 1408 | } | |
1400 | - | let | |
1401 | - | let | |
1402 | - | let | |
1403 | - | func | |
1404 | - | let | |
1405 | - | then ( | |
1406 | - | else | |
1407 | - | let | |
1409 | + | let hE = gC._1 | |
1410 | + | let hF = value(indexOf(hE, max(hE))) | |
1411 | + | let hG = (gC._3 - 25) | |
1412 | + | func hH (eY,di) = { | |
1413 | + | let dS = if ((di == hF)) | |
1414 | + | then (hE[di] - hG) | |
1415 | + | else hE[di] | |
1416 | + | let dW = if ((dS == 0)) | |
1408 | 1417 | then nil | |
1409 | - | else split(drop(toString(pow(10, 0, | |
1410 | - | let | |
1411 | - | func | |
1412 | - | ||
1413 | - | let | |
1414 | - | let | |
1415 | - | let | |
1416 | - | let | |
1417 | - | func | |
1418 | - | then | |
1419 | - | else | |
1420 | - | ||
1421 | - | func | |
1422 | - | then | |
1418 | + | else split(drop(toString(pow(10, 0, dS, 0, 0, DOWN)), 1), "") | |
1419 | + | let gh = hz[di] | |
1420 | + | func hI (hJ,hK) = (hJ :+ gh) | |
1421 | + | ||
1422 | + | let hL = { | |
1423 | + | let fa = dW | |
1424 | + | let fb = size(fa) | |
1425 | + | let fc = nil | |
1426 | + | func hM (fe,ff) = if ((ff >= fb)) | |
1427 | + | then fe | |
1428 | + | else hI(fe, fa[ff]) | |
1429 | + | ||
1430 | + | func hN (fe,ff) = if ((ff >= fb)) | |
1431 | + | then fe | |
1423 | 1432 | else throw("List size exceeds 25") | |
1424 | 1433 | ||
1425 | - | | |
1426 | - | } | |
1427 | - | ( | |
1434 | + | hN(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(hM(fc, 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) | |
1435 | + | } | |
1436 | + | (eY ++ hL) | |
1428 | 1437 | } | |
1429 | 1438 | ||
1430 | - | let | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | func | |
1435 | - | then | |
1436 | - | else | |
1437 | - | ||
1438 | - | func | |
1439 | - | then | |
1439 | + | let fj = { | |
1440 | + | let fa = cS | |
1441 | + | let fb = size(fa) | |
1442 | + | let fc = nil | |
1443 | + | func hM (fe,ff) = if ((ff >= fb)) | |
1444 | + | then fe | |
1445 | + | else hH(fe, fa[ff]) | |
1446 | + | ||
1447 | + | func hN (fe,ff) = if ((ff >= fb)) | |
1448 | + | then fe | |
1440 | 1449 | else throw("List size exceeds 6") | |
1441 | 1450 | ||
1442 | - | | |
1451 | + | hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6) | |
1443 | 1452 | } | |
1444 | - | func | |
1445 | - | ||
1446 | - | let | |
1447 | - | let | |
1448 | - | let | |
1449 | - | func | |
1450 | - | then | |
1451 | - | else | |
1452 | - | ||
1453 | - | func | |
1454 | - | then | |
1453 | + | func hO (eY,fI) = (eY + fj[fI]) | |
1454 | + | ||
1455 | + | let fa = hy | |
1456 | + | let fb = size(fa) | |
1457 | + | let fc = "" | |
1458 | + | func hP (fe,ff) = if ((ff >= fb)) | |
1459 | + | then fe | |
1460 | + | else hO(fe, fa[ff]) | |
1461 | + | ||
1462 | + | func hQ (fe,ff) = if ((ff >= fb)) | |
1463 | + | then fe | |
1455 | 1464 | else throw("List size exceeds 25") | |
1456 | 1465 | ||
1457 | - | hM(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(hL(eY, 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) | |
1458 | - | } | |
1459 | - | ||
1460 | - | ||
1461 | - | func hN (hO) = { | |
1462 | - | let gx = split(valueOrElse(getString(hO), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1463 | - | [toString(valueOrElse(parseInt(gx[bm]), 0)), if ((size(split(gx[bn], "_")) == aI)) | |
1464 | - | then gx[bn] | |
1465 | - | else "0_0_0_0_0_0", if ((size(split(gx[bo], "_")) == aI)) | |
1466 | - | then gx[bo] | |
1467 | - | else "0_0_0_0_0_0", gx[bp]] | |
1468 | - | } | |
1469 | - | ||
1470 | - | ||
1471 | - | func hP (hQ) = { | |
1472 | - | let fs = split(hQ, "_") | |
1473 | - | ((aL * (parseIntValue(fs[1]) + 1)) * parseIntValue(fs[0])) | |
1466 | + | hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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) | |
1474 | 1467 | } | |
1475 | 1468 | ||
1476 | 1469 | ||
1477 | 1470 | func hR (hS) = { | |
1478 | - | let hT = hS[bg] | |
1479 | - | func hU (eU,hV) = (eU + parseIntValue(hV)) | |
1480 | - | ||
1481 | - | func hW (eU,hV) = { | |
1482 | - | let dg = eU._1 | |
1483 | - | let eN = (((parseIntValue(hV) + bc) - 1) / bc) | |
1484 | - | $Tuple2((dg + 1), (eU._2 + (eN * cK))) | |
1471 | + | let gB = split(valueOrElse(getString(hS), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1472 | + | [toString(valueOrElse(parseInt(gB[bn]), 0)), if ((size(split(gB[bo], "_")) == aJ)) | |
1473 | + | then gB[bo] | |
1474 | + | else "0_0_0_0_0_0", if ((size(split(gB[bp], "_")) == aJ)) | |
1475 | + | then gB[bp] | |
1476 | + | else "0_0_0_0_0_0", gB[bq]] | |
1477 | + | } | |
1478 | + | ||
1479 | + | ||
1480 | + | func hT (hU) = { | |
1481 | + | let fw = split(hU, "_") | |
1482 | + | ((aM * (parseIntValue(fw[1]) + 1)) * parseIntValue(fw[0])) | |
1483 | + | } | |
1484 | + | ||
1485 | + | ||
1486 | + | func hV (hW) = { | |
1487 | + | let hX = hW[bh] | |
1488 | + | func hY (eY,hZ) = (eY + parseIntValue(hZ)) | |
1489 | + | ||
1490 | + | func ia (eY,hZ) = { | |
1491 | + | let di = eY._1 | |
1492 | + | let eR = (((parseIntValue(hZ) + bd) - 1) / bd) | |
1493 | + | $Tuple2((di + 1), (eY._2 + (eR * cM))) | |
1485 | 1494 | } | |
1486 | 1495 | ||
1487 | - | let | |
1488 | - | let | |
1489 | - | let | |
1490 | - | let | |
1491 | - | func | |
1492 | - | then | |
1493 | - | else | |
1494 | - | ||
1495 | - | func | |
1496 | - | then | |
1496 | + | let ib = { | |
1497 | + | let fa = split(hW[bf], "_") | |
1498 | + | let fb = size(fa) | |
1499 | + | let fc = 0 | |
1500 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1501 | + | then fe | |
1502 | + | else hY(fe, fa[ff]) | |
1503 | + | ||
1504 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1505 | + | then fe | |
1497 | 1506 | else throw("List size exceeds 6") | |
1498 | 1507 | ||
1499 | - | fc | |
1508 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1500 | 1509 | } | |
1501 | - | let | |
1502 | - | let | |
1503 | - | let | |
1504 | - | let | |
1505 | - | func | |
1506 | - | then | |
1507 | - | else | |
1508 | - | ||
1509 | - | func | |
1510 | - | then | |
1510 | + | let ic = { | |
1511 | + | let fa = split(hW[bg], "_") | |
1512 | + | let fb = size(fa) | |
1513 | + | let fc = 0 | |
1514 | + | func hM (fe,ff) = if ((ff >= fb)) | |
1515 | + | then fe | |
1516 | + | else hY(fe, fa[ff]) | |
1517 | + | ||
1518 | + | func hN (fe,ff) = if ((ff >= fb)) | |
1519 | + | then fe | |
1511 | 1520 | else throw("List size exceeds 6") | |
1512 | 1521 | ||
1513 | - | | |
1522 | + | hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6) | |
1514 | 1523 | } | |
1515 | - | let | |
1524 | + | let id = if ((hX == "")) | |
1516 | 1525 | then 0 | |
1517 | - | else ( let | |
1518 | - | let | |
1519 | - | let | |
1520 | - | func | |
1521 | - | then | |
1522 | - | else | |
1523 | - | ||
1524 | - | func | |
1525 | - | then | |
1526 | + | else ( let fa = split_4C(hX, "_") | |
1527 | + | let fb = size(fa) | |
1528 | + | let fc = $Tuple2(0, 0) | |
1529 | + | func hP (fe,ff) = if ((ff >= fb)) | |
1530 | + | then fe | |
1531 | + | else ia(fe, fa[ff]) | |
1532 | + | ||
1533 | + | func hQ (fe,ff) = if ((ff >= fb)) | |
1534 | + | then fe | |
1526 | 1535 | else throw("List size exceeds 50") | |
1527 | 1536 | ||
1528 | - | | |
1529 | - | (( | |
1530 | - | } | |
1531 | - | ||
1532 | - | ||
1533 | - | func | |
1534 | - | let | |
1535 | - | let | |
1536 | - | let | |
1537 | - | let | |
1538 | - | let | |
1539 | - | let | |
1540 | - | then makeString(["0", toString( | |
1537 | + | hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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))._2 | |
1538 | + | ((ib + ic) + id) | |
1539 | + | } | |
1540 | + | ||
1541 | + | ||
1542 | + | func ie (if,ig,ih) = { | |
1543 | + | let hU = ((toString(ig) + "_") + toString(ih)) | |
1544 | + | let ii = hT(hU) | |
1545 | + | let ij = valueOrElse(getString(if), (hU + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1546 | + | let ik = split_4C(ij, ":") | |
1547 | + | let il = hV(ik) | |
1548 | + | let im = if ((5 > size(ik))) | |
1549 | + | then makeString(["0", toString(il), toString((ii - il)), toString(ii)], "_") | |
1541 | 1550 | else { | |
1542 | - | let | |
1543 | - | let | |
1544 | - | let | |
1545 | - | then parseIntValue( | |
1546 | - | else | |
1547 | - | makeString([toString( | |
1548 | - | } | |
1549 | - | [ | |
1550 | - | then | |
1551 | - | else "0_0_0_0_0_0", if ((size(split( | |
1552 | - | then | |
1553 | - | else "0_0_0_0_0_0", | |
1554 | - | } | |
1555 | - | ||
1556 | - | ||
1557 | - | func | |
1558 | - | let | |
1559 | - | let | |
1560 | - | (( | |
1561 | - | } | |
1562 | - | ||
1563 | - | ||
1564 | - | func | |
1551 | + | let in = split(ik[bi], "_") | |
1552 | + | let io = parseIntValue(in[bj]) | |
1553 | + | let ip = if ((size(in) > 1)) | |
1554 | + | then parseIntValue(in[bk]) | |
1555 | + | else il | |
1556 | + | makeString([toString(io), toString(ip), toString(((ii - io) - ip)), toString(ii)], "_") | |
1557 | + | } | |
1558 | + | [ik[be], if ((size(split(ik[bf], "_")) == aJ)) | |
1559 | + | then ik[bf] | |
1560 | + | else "0_0_0_0_0_0", if ((size(split(ik[bg], "_")) == aJ)) | |
1561 | + | then ik[bg] | |
1562 | + | else "0_0_0_0_0_0", ik[bh], im] | |
1563 | + | } | |
1564 | + | ||
1565 | + | ||
1566 | + | func iq (hW) = { | |
1567 | + | let ir = hV(hW) | |
1568 | + | let is = parseIntValue(split(hW[bi], "_")[bj]) | |
1569 | + | ((hT(hW[be]) - ir) - is) | |
1570 | + | } | |
1571 | + | ||
1572 | + | ||
1573 | + | func it (iu,hW,iv) = if ((size(iu) != 3)) | |
1565 | 1574 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1566 | 1575 | else { | |
1567 | - | let | |
1568 | - | let | |
1569 | - | let | |
1576 | + | let iw = split(iu[0], "_") | |
1577 | + | let ix = split(iu[1], "_") | |
1578 | + | let iy = if ((iu[2] == "")) | |
1570 | 1579 | then nil | |
1571 | - | else split_4C( | |
1572 | - | if ((size( | |
1580 | + | else split_4C(iu[2], "_") | |
1581 | + | if ((size(iw) != aJ)) | |
1573 | 1582 | then throw("All 6 resources should be passed") | |
1574 | - | else if ((size( | |
1583 | + | else if ((size(ix) != aJ)) | |
1575 | 1584 | then throw("All 6 materials should be passed") | |
1576 | 1585 | else { | |
1577 | - | let | |
1578 | - | let | |
1579 | - | let | |
1580 | - | let | |
1586 | + | let hg = iq(hW) | |
1587 | + | let iz = split(hW[bf], "_") | |
1588 | + | let iA = split(hW[bg], "_") | |
1589 | + | let iB = if ((hW[bh] == "")) | |
1581 | 1590 | then nil | |
1582 | - | else split_4C( | |
1583 | - | let | |
1584 | - | let | |
1585 | - | let | |
1591 | + | else split_4C(hW[bh], "_") | |
1592 | + | let he = split(iv[bo], "_") | |
1593 | + | let iC = split(iv[bp], "_") | |
1594 | + | let iD = if ((iv[bq] == "")) | |
1586 | 1595 | then nil | |
1587 | - | else split_4C( | |
1588 | - | func | |
1589 | - | let | |
1590 | - | let | |
1591 | - | let | |
1592 | - | let | |
1593 | - | if (( | |
1594 | - | then $Tuple4(( | |
1595 | - | else if (( | |
1596 | - | then if (( | |
1597 | - | then throw((((("Attempt to take " + | |
1598 | - | else $Tuple4(( | |
1599 | - | else if ((-( | |
1600 | - | then throw((((("Attempt to take " + toString(-( | |
1601 | - | else $Tuple4(( | |
1596 | + | else split_4C(iv[bq], "_") | |
1597 | + | func iE (eY,hZ) = { | |
1598 | + | let gR = eY._1 | |
1599 | + | let iF = parseIntValue(hZ) | |
1600 | + | let iG = parseIntValue(iz[gR]) | |
1601 | + | let iH = parseIntValue(he[gR]) | |
1602 | + | if ((iF == 0)) | |
1603 | + | then $Tuple4((gR + 1), (eY._2 :+ iz[gR]), (eY._3 :+ he[gR]), eY._4) | |
1604 | + | else if ((iF > 0)) | |
1605 | + | then if ((iF > iH)) | |
1606 | + | then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iH)) + " available")) | |
1607 | + | else $Tuple4((gR + 1), (eY._2 :+ toString((iG + iF))), (eY._3 :+ toString((iH - iF))), (eY._4 + iF)) | |
1608 | + | else if ((-(iF) > iG)) | |
1609 | + | then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iG)) + " available")) | |
1610 | + | else $Tuple4((gR + 1), (eY._2 :+ toString((iG + iF))), (eY._3 :+ toString((iH - iF))), (eY._4 + iF)) | |
1602 | 1611 | } | |
1603 | 1612 | ||
1604 | - | let | |
1605 | - | let | |
1606 | - | let | |
1607 | - | let | |
1608 | - | func | |
1609 | - | then | |
1610 | - | else | |
1611 | - | ||
1612 | - | func | |
1613 | - | then | |
1613 | + | let fj = { | |
1614 | + | let fa = iw | |
1615 | + | let fb = size(fa) | |
1616 | + | let fc = $Tuple4(0, nil, nil, 0) | |
1617 | + | func fd (fe,ff) = if ((ff >= fb)) | |
1618 | + | then fe | |
1619 | + | else iE(fe, fa[ff]) | |
1620 | + | ||
1621 | + | func fg (fe,ff) = if ((ff >= fb)) | |
1622 | + | then fe | |
1614 | 1623 | else throw("List size exceeds 6") | |
1615 | 1624 | ||
1616 | - | fc | |
1625 | + | fg(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6) | |
1617 | 1626 | } | |
1618 | - | func | |
1619 | - | let | |
1620 | - | let | |
1621 | - | let | |
1622 | - | let | |
1623 | - | if (( | |
1624 | - | then $Tuple4(( | |
1625 | - | else if (( | |
1626 | - | then if (( | |
1627 | - | then throw((((("Attempt to take " + | |
1628 | - | else $Tuple4(( | |
1629 | - | else if ((-( | |
1630 | - | then throw((((("Attempt to take " + toString(-( | |
1631 | - | else $Tuple4(( | |
1627 | + | func iI (eY,hZ) = { | |
1628 | + | let gR = eY._1 | |
1629 | + | let iF = parseIntValue(hZ) | |
1630 | + | let iJ = parseIntValue(iA[gR]) | |
1631 | + | let iK = parseIntValue(iC[gR]) | |
1632 | + | if ((iF == 0)) | |
1633 | + | then $Tuple4((gR + 1), (eY._2 :+ iA[gR]), (eY._3 :+ iC[gR]), eY._4) | |
1634 | + | else if ((iF > 0)) | |
1635 | + | then if ((iF > iK)) | |
1636 | + | then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iK)) + " available")) | |
1637 | + | else $Tuple4((gR + 1), (eY._2 :+ toString((iJ + iF))), (eY._3 :+ toString((iK - iF))), (eY._4 + iF)) | |
1638 | + | else if ((-(iF) > iJ)) | |
1639 | + | then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iJ)) + " available")) | |
1640 | + | else $Tuple4((gR + 1), (eY._2 :+ toString((iJ + iF))), (eY._3 :+ toString((iK - iF))), (eY._4 + iF)) | |
1632 | 1641 | } | |
1633 | 1642 | ||
1634 | - | let | |
1635 | - | let | |
1636 | - | let | |
1637 | - | let | |
1638 | - | func | |
1639 | - | then | |
1640 | - | else | |
1641 | - | ||
1642 | - | func | |
1643 | - | then | |
1643 | + | let gx = { | |
1644 | + | let fa = ix | |
1645 | + | let fb = size(fa) | |
1646 | + | let fc = $Tuple4(0, nil, nil, fj._4) | |
1647 | + | func hM (fe,ff) = if ((ff >= fb)) | |
1648 | + | then fe | |
1649 | + | else iI(fe, fa[ff]) | |
1650 | + | ||
1651 | + | func hN (fe,ff) = if ((ff >= fb)) | |
1652 | + | then fe | |
1644 | 1653 | else throw("List size exceeds 6") | |
1645 | 1654 | ||
1646 | - | | |
1655 | + | hN(hM(hM(hM(hM(hM(hM(fc, 0), 1), 2), 3), 4), 5), 6) | |
1647 | 1656 | } | |
1648 | - | func | |
1649 | - | let | |
1650 | - | let | |
1651 | - | let | |
1652 | - | then parseIntValue( | |
1657 | + | func iL (eY,hZ) = { | |
1658 | + | let gR = eY._1 | |
1659 | + | let iF = parseIntValue(hZ) | |
1660 | + | let iM = if ((size(iB) > gR)) | |
1661 | + | then parseIntValue(iB[gR]) | |
1653 | 1662 | else 0 | |
1654 | - | let | |
1655 | - | then parseIntValue( | |
1663 | + | let iN = if ((size(iD) > gR)) | |
1664 | + | then parseIntValue(iD[gR]) | |
1656 | 1665 | else 0 | |
1657 | - | if (( | |
1658 | - | then $Tuple4(( | |
1659 | - | else if (( | |
1660 | - | then if (( | |
1661 | - | then throw((((("Attempt to take " + | |
1666 | + | if ((iF == 0)) | |
1667 | + | then $Tuple4((gR + 1), (eY._2 :+ toString(iM)), (eY._3 :+ toString(iN)), eY._4) | |
1668 | + | else if ((iF > 0)) | |
1669 | + | then if ((iF > iN)) | |
1670 | + | then throw((((("Attempt to take " + hZ) + " from backpack, but only ") + toString(iN)) + " available")) | |
1662 | 1671 | else { | |
1663 | - | let | |
1664 | - | $Tuple4(( | |
1672 | + | let ga = (eO((iM + iF), bd) - eO(iM, bd)) | |
1673 | + | $Tuple4((gR + 1), (eY._2 :+ toString((iM + iF))), (eY._3 :+ toString((iN - iF))), (eY._4 + ga)) | |
1665 | 1674 | } | |
1666 | - | else if ((-( | |
1667 | - | then throw((((("Attempt to take " + toString(-( | |
1675 | + | else if ((-(iF) > iM)) | |
1676 | + | then throw((((("Attempt to take " + toString(-(iF))) + " from warehouse, but only ") + toString(iM)) + " available")) | |
1668 | 1677 | else { | |
1669 | - | let | |
1670 | - | $Tuple4(( | |
1678 | + | let ga = (eO((iM + iF), bd) - eO(iM, bd)) | |
1679 | + | $Tuple4((gR + 1), (eY._2 :+ toString((iM + iF))), (eY._3 :+ toString((iN - iF))), (eY._4 + ga)) | |
1671 | 1680 | } | |
1672 | 1681 | } | |
1673 | 1682 | ||
1674 | - | let | |
1683 | + | let gB = if ((size(iy) != 0)) | |
1675 | 1684 | then { | |
1676 | - | let | |
1677 | - | let | |
1678 | - | let | |
1679 | - | func | |
1680 | - | then | |
1681 | - | else | |
1682 | - | ||
1683 | - | func | |
1684 | - | then | |
1685 | + | let fa = iy | |
1686 | + | let fb = size(fa) | |
1687 | + | let fc = $Tuple4(0, nil, nil, gx._4) | |
1688 | + | func hP (fe,ff) = if ((ff >= fb)) | |
1689 | + | then fe | |
1690 | + | else iL(fe, fa[ff]) | |
1691 | + | ||
1692 | + | func hQ (fe,ff) = if ((ff >= fb)) | |
1693 | + | then fe | |
1685 | 1694 | else throw("List size exceeds 50") | |
1686 | 1695 | ||
1687 | - | | |
1696 | + | hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(fc, 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) | |
1688 | 1697 | } | |
1689 | - | else $Tuple4(0, | |
1690 | - | let | |
1691 | - | if (( | |
1692 | - | then throw((((("Attempt to put total " + toString( | |
1693 | - | else $Tuple7(makeString( | |
1698 | + | else $Tuple4(0, iB, iD, gx._4) | |
1699 | + | let iO = gB._4 | |
1700 | + | if ((iO > hg)) | |
1701 | + | then throw((((("Attempt to put total " + toString(iO)) + " stuff, but only ") + toString(hg)) + " warehouse space left")) | |
1702 | + | else $Tuple7(makeString(fj._2, "_"), makeString(gx._2, "_"), makeString_2C(gB._2, "_"), makeString(fj._3, "_"), makeString(gx._3, "_"), makeString_2C(gB._3, "_"), iO) | |
1694 | 1703 | } | |
1695 | 1704 | } | |
1696 | 1705 | ||
1697 | 1706 | ||
1698 | - | func | |
1699 | - | let | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let | |
1703 | - | let | |
1704 | - | let | |
1705 | - | let | |
1706 | - | let | |
1707 | - | let | |
1708 | - | let | |
1709 | - | $Tuple2([IntegerEntry( | |
1710 | - | } | |
1711 | - | ||
1712 | - | ||
1713 | - | func | |
1707 | + | func iP (iQ,iR) = { | |
1708 | + | let bR = toString(iQ) | |
1709 | + | let iS = hm(toBigInt(iR)) | |
1710 | + | let iT = valueOrElse(getInteger(ev()), (eu + 1)) | |
1711 | + | let ez = toString(iT) | |
1712 | + | let hv = toInt((iS % eo)) | |
1713 | + | let gU = ht(iS, hv) | |
1714 | + | let dB = aV[hv] | |
1715 | + | let iU = Issue(eN(ez, "S"), makeString([ez, "S", gU, dB], "_"), 1, 0, false) | |
1716 | + | let bv = calculateAssetId(iU) | |
1717 | + | let iV = toBase58String(bv) | |
1718 | + | $Tuple2([IntegerEntry(ev(), (iT + 1)), iU, StringEntry(ey(ez), iV), StringEntry(bu(iV), bR), StringEntry(eB(ez), bR), IntegerEntry(bE(iV), 0), IntegerEntry(eA(iV, bR), 0), ScriptTransfer(iQ, 1, bv)], $Tuple2(iV, dB)) | |
1719 | + | } | |
1720 | + | ||
1721 | + | ||
1722 | + | func iW (bR,iX,iY) = if (!(sigVerify_8Kb(iX, iY, ee))) | |
1714 | 1723 | then throw("signature does not match") | |
1715 | 1724 | else { | |
1716 | - | let | |
1717 | - | let | |
1718 | - | let | |
1719 | - | let | |
1720 | - | let | |
1721 | - | let | |
1722 | - | let | |
1723 | - | let | |
1724 | - | if (if (( | |
1725 | + | let fw = split_4C(toUtf8String(iX), ";") | |
1726 | + | let iZ = split_4C(fw[0], "|") | |
1727 | + | let ja = split(iZ[eJ], "_") | |
1728 | + | let jb = parseIntValue(ja[0]) | |
1729 | + | let jc = parseIntValue(ja[1]) | |
1730 | + | let jd = split(fw[1], ":") | |
1731 | + | let je = jd[0] | |
1732 | + | let jf = parseIntValue(iZ[eK]) | |
1733 | + | if (if ((jf > (lastBlock.timestamp + eg))) | |
1725 | 1734 | then true | |
1726 | - | else ((lastBlock.timestamp - | |
1727 | - | then throw(((("signature outdated: logTime=" + toString( | |
1735 | + | else ((lastBlock.timestamp - eg) > jf)) | |
1736 | + | then throw(((("signature outdated: logTime=" + toString(jf)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1728 | 1737 | else { | |
1729 | - | let | |
1730 | - | let | |
1731 | - | if (( | |
1732 | - | then throw(((("Tx ids don't match! In state: " + | |
1738 | + | let jg = jd[1] | |
1739 | + | let jh = valueOrElse(getString(dQ(bR)), "") | |
1740 | + | if ((jh != jg)) | |
1741 | + | then throw(((("Tx ids don't match! In state: " + jh) + ", in msg: ") + jg)) | |
1733 | 1742 | else { | |
1734 | - | let B = valueOrErrorMessage(getString( | |
1735 | - | let | |
1736 | - | let | |
1737 | - | let | |
1738 | - | if (( | |
1739 | - | then throw(((("oldHealth=" + toString( | |
1740 | - | else if ((0 >= | |
1743 | + | let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked") | |
1744 | + | let ji = A(B) | |
1745 | + | let jj = aj(valueOrElse(getInteger(E(B)), 0)) | |
1746 | + | let jk = valueOrElse(getInteger(ji), jj) | |
1747 | + | if ((jk != jb)) | |
1748 | + | then throw(((("oldHealth=" + toString(jk)) + " from state does not match one from flight log=") + toString(jb))) | |
1749 | + | else if ((0 >= jb)) | |
1741 | 1750 | then throw("You can't fly with zero health") | |
1742 | - | else if (!( | |
1751 | + | else if (!(gD(B))) | |
1743 | 1752 | then throw("Equipment incompatible") | |
1744 | 1753 | else { | |
1745 | - | let | |
1746 | - | then | |
1754 | + | let jl = if ((size(iZ) > eL)) | |
1755 | + | then iZ[eL] | |
1747 | 1756 | else "" | |
1748 | - | let | |
1749 | - | then | |
1757 | + | let jm = if ((size(iZ) > eM)) | |
1758 | + | then iZ[eM] | |
1750 | 1759 | else "" | |
1751 | - | let | |
1752 | - | then ( | |
1760 | + | let jn = if (if ((jc > 0)) | |
1761 | + | then (jl == "$") | |
1753 | 1762 | else false) | |
1754 | - | then | |
1763 | + | then dH(invoke(dj, "sendUsdtPrize", [bR], nil)) | |
1755 | 1764 | else 0 | |
1756 | - | $Tuple5( | |
1765 | + | $Tuple5(jc, B, jn, je, jm) | |
1757 | 1766 | } | |
1758 | 1767 | } | |
1759 | 1768 | } | |
1760 | 1769 | } | |
1761 | 1770 | ||
1762 | 1771 | ||
1763 | - | func | |
1764 | - | let | |
1765 | - | let | |
1766 | - | let | |
1767 | - | let | |
1768 | - | (( | |
1769 | - | } | |
1770 | - | ||
1771 | - | ||
1772 | - | func | |
1773 | - | let | |
1774 | - | then $Tuple2( | |
1772 | + | func jo (Q,jp) = { | |
1773 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
1774 | + | let jq = valueOrElse(getInteger(by(aI, Q)), 0) | |
1775 | + | let jr = (ih / 6) | |
1776 | + | let js = (ih / 7) | |
1777 | + | ((aL + fraction(aL, ((ih + jr) + (2 * js)), 5)) + fraction(aL, jq, (jp * 5))) | |
1778 | + | } | |
1779 | + | ||
1780 | + | ||
1781 | + | func jt (c,ju,jv) = { | |
1782 | + | let jw = if ((ju == eG)) | |
1783 | + | then $Tuple2(jv, valueOrElse(getString(bN(c)), "")) | |
1775 | 1784 | else { | |
1776 | - | let B = valueOrErrorMessage(getString( | |
1777 | - | let | |
1778 | - | let | |
1779 | - | if (( | |
1780 | - | then throw((("Duck location type is " + | |
1781 | - | else $Tuple2( | |
1782 | - | } | |
1783 | - | let Q = | |
1784 | - | let | |
1785 | - | let | |
1786 | - | let | |
1787 | - | let | |
1788 | - | let | |
1789 | - | if (( | |
1785 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
1786 | + | let jx = valueOrElse(getString(bP(B)), aN) | |
1787 | + | let cl = split(value(jx), "_") | |
1788 | + | if ((cl[bs] != "L")) | |
1789 | + | then throw((("Duck location type is " + cl[bs]) + ", but should be L")) | |
1790 | + | else $Tuple2(cl[bt], B) | |
1791 | + | } | |
1792 | + | let Q = jw._1 | |
1793 | + | let jy = jw._2 | |
1794 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
1795 | + | let jA = bx(Q) | |
1796 | + | let jB = valueOrErrorMessage(getInteger(jA), (("Land " + jz.name) + " is not staked")) | |
1797 | + | let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned")) | |
1798 | + | if ((jC != c)) | |
1790 | 1799 | then throw((aF + " is not yours")) | |
1791 | 1800 | else { | |
1792 | - | let | |
1793 | - | $Tuple4( | |
1794 | - | } | |
1795 | - | } | |
1796 | - | ||
1797 | - | ||
1798 | - | func | |
1801 | + | let jD = split(jz.description, "_") | |
1802 | + | $Tuple4(jy, Q, jD, jB) | |
1803 | + | } | |
1804 | + | } | |
1805 | + | ||
1806 | + | ||
1807 | + | func jE (c,eP,ju,jv) = if ((0 > eP)) | |
1799 | 1808 | then throw("Negative amount") | |
1800 | 1809 | else { | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | let | |
1805 | - | if ((0 > | |
1806 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1810 | + | let gh = jt(c, ju, jv) | |
1811 | + | let dN = gh._3[dq] | |
1812 | + | let gN = gT(gh._3[dr]) | |
1813 | + | let gX = (lastBlock.timestamp - gh._4) | |
1814 | + | if ((0 > gX)) | |
1815 | + | then throw(((("Saved timestamp is in future, saved = " + toString(gh._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1807 | 1816 | else { | |
1808 | - | let | |
1809 | - | let | |
1810 | - | let | |
1811 | - | if (( | |
1812 | - | then throw(((("Not enough resources, available = " + toString( | |
1817 | + | let jp = dM(dN) | |
1818 | + | let jF = jo(gh._2, jp) | |
1819 | + | let jG = fraction(gX, (jF * jp), a) | |
1820 | + | if ((eP > jG)) | |
1821 | + | then throw(((("Not enough resources, available = " + toString(jG)) + ", requested = ") + toString(eP))) | |
1813 | 1822 | else { | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | let | |
1818 | - | let | |
1819 | - | let | |
1820 | - | let | |
1821 | - | let | |
1822 | - | let | |
1823 | - | if (if (( | |
1824 | - | then ( | |
1823 | + | let jH = fraction((jG - eP), a, (jF * jp)) | |
1824 | + | let jI = (lastBlock.timestamp - jH) | |
1825 | + | let ig = (jp / cN) | |
1826 | + | let hf = hb(gN, (gX - jH), ig, jF) | |
1827 | + | let if = bD(gh._2) | |
1828 | + | let ih = valueOrElse(getInteger(bE(gh._2)), 0) | |
1829 | + | let hW = ie(if, ig, ih) | |
1830 | + | let in = split(hW[bi], "_") | |
1831 | + | let hg = parseIntValue(in[bl]) | |
1832 | + | if (if ((ju == eG)) | |
1833 | + | then (eP > hg) | |
1825 | 1834 | else false) | |
1826 | - | then throw((("Only " + toString( | |
1835 | + | then throw((("Only " + toString(hg)) + " space left in warehouse")) | |
1827 | 1836 | else { | |
1828 | - | let | |
1829 | - | let | |
1830 | - | let | |
1831 | - | let | |
1832 | - | let | |
1833 | - | then $Tuple4( | |
1834 | - | else if (( | |
1835 | - | then $Tuple4( | |
1837 | + | let hS = bO(gh._1) | |
1838 | + | let iv = hR(hS) | |
1839 | + | let he = split(iv[bo], "_") | |
1840 | + | let hd = split(hW[bf], "_") | |
1841 | + | let jJ = if ((ju == eG)) | |
1842 | + | then $Tuple4(gV(hd, gN, (gX - jH), ig, jF), iv[bo], (parseIntValue(in[bk]) + hf._2), (parseIntValue(in[bl]) - hf._2)) | |
1843 | + | else if ((ju == eH)) | |
1844 | + | then $Tuple4(hW[bf], gV(he, gN, (gX - jH), ig, jF), parseIntValue(in[bk]), parseIntValue(in[bl])) | |
1836 | 1845 | else { | |
1837 | - | let | |
1838 | - | let | |
1839 | - | $Tuple4( | |
1846 | + | let jK = hc(hd, he, hf, hg) | |
1847 | + | let jL = min([parseIntValue(in[bl]), hf._2]) | |
1848 | + | $Tuple4(jK._1, jK._2, (parseIntValue(in[bk]) + jL), (parseIntValue(in[bl]) - jL)) | |
1840 | 1849 | } | |
1841 | - | let | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let | |
1845 | - | $Tuple5([IntegerEntry( | |
1850 | + | let jM = jJ._1 | |
1851 | + | let jN = jJ._2 | |
1852 | + | let jO = jJ._3 | |
1853 | + | let jP = jJ._4 | |
1854 | + | $Tuple5([IntegerEntry(bx(gh._2), jI), IntegerEntry(bA(aF, gh._2, c), jI)], hS, [iv[bn], jN, iv[bp], iv[bq]], if, [hW[be], jM, hW[bg], hW[bh], makeString([in[bj], toString(jO), toString(jP), in[bm]], "_")]) | |
1846 | 1855 | } | |
1847 | 1856 | } | |
1848 | 1857 | } | |
1849 | 1858 | } | |
1850 | 1859 | ||
1851 | 1860 | ||
1852 | - | func | |
1853 | - | let | |
1854 | - | let | |
1855 | - | let | |
1856 | - | | |
1857 | - | } | |
1858 | - | ||
1859 | - | ||
1860 | - | func | |
1861 | - | let c = toString( | |
1862 | - | let | |
1863 | - | let | |
1864 | - | let | |
1865 | - | let | |
1866 | - | if (if (!( | |
1867 | - | then ( | |
1861 | + | func jQ (c,Q,jp,ju) = { | |
1862 | + | let jA = bx(Q) | |
1863 | + | let jB = value(getInteger(jA)) | |
1864 | + | let jG = (fraction((lastBlock.timestamp - jB), jo(Q, jp), a) * jp) | |
1865 | + | jE(c, jG, ju, Q) | |
1866 | + | } | |
1867 | + | ||
1868 | + | ||
1869 | + | func jR (fl,iQ,jS,Q) = { | |
1870 | + | let c = toString(iQ) | |
1871 | + | let gh = jt(c, eI, Q) | |
1872 | + | let jp = dM(gh._3[dq]) | |
1873 | + | let jT = bE(gh._2) | |
1874 | + | let jU = valueOrElse(getInteger(jT), 0) | |
1875 | + | if (if (!(cA)) | |
1876 | + | then (jU >= 3) | |
1868 | 1877 | else false) | |
1869 | 1878 | then throw("Currently max infrastructure level = 3") | |
1870 | 1879 | else { | |
1871 | - | let | |
1872 | - | let ao = ( | |
1873 | - | if (if ( | |
1874 | - | then (ao > | |
1880 | + | let jV = ((sqrt(jp, 0, 0, DOWN) / 5) + 2) | |
1881 | + | let ao = (jU + 1) | |
1882 | + | if (if (cA) | |
1883 | + | then (ao > jV) | |
1875 | 1884 | else false) | |
1876 | - | then throw(("Currently max infrastructure level = " + toString( | |
1885 | + | then throw(("Currently max infrastructure level = " + toString(jV))) | |
1877 | 1886 | else { | |
1878 | - | let | |
1879 | - | if (if (!( | |
1880 | - | then ( | |
1887 | + | let jW = fraction(ej, (jp * ao), cN) | |
1888 | + | if (if (!(fl)) | |
1889 | + | then (jS != jW) | |
1881 | 1890 | else false) | |
1882 | - | then throw(("Payment attached should be " + toString( | |
1891 | + | then throw(("Payment attached should be " + toString(jW))) | |
1883 | 1892 | else { | |
1884 | - | let | |
1885 | - | let | |
1886 | - | let | |
1887 | - | let | |
1888 | - | let | |
1889 | - | let | |
1890 | - | let | |
1891 | - | let | |
1892 | - | let | |
1893 | - | let | |
1894 | - | let | |
1895 | - | let | |
1896 | - | $Tuple3(([IntegerEntry( | |
1893 | + | let hS = bO(gh._1) | |
1894 | + | let iv = hR(hS) | |
1895 | + | let jX = split(iv[bp], "_") | |
1896 | + | let jY = fraction(cH, (jp * ao), cN) | |
1897 | + | let jZ = makeString(fk(fl, jX, jY), "_") | |
1898 | + | let ka = jQ(c, gh._2, jp, eI) | |
1899 | + | let kb = ka._5 | |
1900 | + | let kc = hT(kb[be]) | |
1901 | + | let kd = makeString([split(kb[be], "_")[0], toString(ao)], "_") | |
1902 | + | let ke = hT(kd) | |
1903 | + | let in = split(kb[bi], "_") | |
1904 | + | let kf = makeString([in[bj], in[bk], toString(((parseIntValue(in[bl]) + ke) - kc)), toString(ke)], "_") | |
1905 | + | $Tuple3(([IntegerEntry(jT, ao), IntegerEntry(eA(gh._2, c), ao), StringEntry(hS, makeString([iv[bn], ka._3[bo], jZ, iv[bq]], ":")), StringEntry(ka._4, makeString([kd, kb[bf], kb[bg], kb[bh], kf], ":"))] ++ ka._1), ao, jY) | |
1897 | 1906 | } | |
1898 | 1907 | } | |
1899 | 1908 | } | |
1900 | 1909 | } | |
1901 | 1910 | ||
1902 | 1911 | ||
1903 | - | func kc (kd,ke,kf,kg) = { | |
1904 | - | let ai = valueOrElse(getInteger(ke), 0) | |
1905 | - | let an = (ai + kg) | |
1906 | - | let kh = al(valueOrElse(getInteger(kd), 0), an) | |
1907 | - | $Tuple2([IntegerEntry(kd, kh[0]), IntegerEntry(ke, an), IntegerEntry(kf, (valueOrElse(getInteger(kf), 0) + kh[1]))], an) | |
1908 | - | } | |
1909 | - | ||
1910 | - | ||
1911 | - | func ki (B,kg) = kc(E(B), D(B), F(B), kg) | |
1912 | - | ||
1913 | - | ||
1914 | - | func kj (c,kg) = kc(I(c), H(c), J(c), kg) | |
1915 | - | ||
1916 | - | ||
1917 | - | func kk (c) = { | |
1918 | - | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
1919 | - | let kl = bH(c) | |
1920 | - | let km = getString(kl) | |
1921 | - | if (!(isDefined(km))) | |
1912 | + | func kg (kh,ki,kj,kk) = { | |
1913 | + | let ai = valueOrElse(getInteger(ki), 0) | |
1914 | + | let an = (ai + kk) | |
1915 | + | let kl = al(valueOrElse(getInteger(kh), 0), an) | |
1916 | + | $Tuple2([IntegerEntry(kh, kl[0]), IntegerEntry(ki, an), IntegerEntry(kj, (valueOrElse(getInteger(kj), 0) + kl[1]))], an) | |
1917 | + | } | |
1918 | + | ||
1919 | + | ||
1920 | + | func km (B,kk) = { | |
1921 | + | let jz = value(assetInfo(fromBase58String(B))) | |
1922 | + | let c = valueOrErrorMessage(getString(bM(B)), (("NFT " + jz.name) + " is orphaned")) | |
1923 | + | if (if (if (cB) | |
1924 | + | then (jz.issuer == this) | |
1925 | + | else false) | |
1926 | + | then contains(jz.name, aH) | |
1927 | + | else false) | |
1928 | + | then kg(I(c), H(c), J(c), kk) | |
1929 | + | else kg(E(B), D(B), F(B), kk) | |
1930 | + | } | |
1931 | + | ||
1932 | + | ||
1933 | + | func kn (c,kk) = kg(I(c), H(c), J(c), kk) | |
1934 | + | ||
1935 | + | ||
1936 | + | func ko (c) = { | |
1937 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
1938 | + | let kp = bI(c) | |
1939 | + | let kq = getString(kp) | |
1940 | + | if (!(isDefined(kq))) | |
1922 | 1941 | then throw("You are not eligible for ONBOARD artifact") | |
1923 | 1942 | else { | |
1924 | - | let | |
1925 | - | let | |
1926 | - | if (isDefined( | |
1927 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1943 | + | let kr = bK(c) | |
1944 | + | let ks = getString(kr) | |
1945 | + | if (isDefined(ks)) | |
1946 | + | then throw(("You already used your ONBOARD artifact on duck " + value(ks))) | |
1928 | 1947 | else { | |
1929 | - | let | |
1930 | - | let | |
1931 | - | if (isDefined( | |
1932 | - | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value( | |
1933 | - | else ([StringEntry( | |
1948 | + | let kt = bJ(B) | |
1949 | + | let ku = getString(kt) | |
1950 | + | if (isDefined(ku)) | |
1951 | + | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(ku))) | |
1952 | + | else ([StringEntry(kr, B), StringEntry(kt, c)] ++ km(B, af)._1) | |
1934 | 1953 | } | |
1935 | 1954 | } | |
1936 | 1955 | } | |
1937 | 1956 | ||
1938 | 1957 | ||
1939 | - | func | |
1940 | - | let | |
1941 | - | let Q = | |
1942 | - | let | |
1943 | - | let | |
1944 | - | if ((valueOrElse(getInteger( | |
1958 | + | func kv (c,jv) = { | |
1959 | + | let gh = jt(c, eI, jv) | |
1960 | + | let Q = gh._2 | |
1961 | + | let jp = dM(gh._3[dq]) | |
1962 | + | let kw = by(aI, Q) | |
1963 | + | if ((valueOrElse(getInteger(kw), 0) > 0)) | |
1945 | 1964 | then throw("Presale artifact is already activated") | |
1946 | - | else if ((parseIntValue( | |
1965 | + | else if ((parseIntValue(gh._3[dp]) > eu)) | |
1947 | 1966 | then throw((((aF + " ") + Q) + " is not eligible for presale artifact")) | |
1948 | 1967 | else { | |
1949 | - | let | |
1950 | - | ((( | |
1968 | + | let ka = jQ(c, Q, jp, eI) | |
1969 | + | (((ka._1 :+ IntegerEntry(kw, jp)) :+ StringEntry(ka._2, makeString(ka._3, ":"))) :+ StringEntry(ka._4, makeString(ka._5, ":"))) | |
1951 | 1970 | } | |
1952 | 1971 | } | |
1953 | 1972 | ||
1954 | 1973 | ||
1955 | - | func | |
1956 | - | let | |
1957 | - | let | |
1974 | + | func kx (B) = { | |
1975 | + | let ck = valueOrElse(getInteger(dn, bV), 0) | |
1976 | + | let jx = split(valueOrElse(getString(bP(B)), aN), "_") | |
1958 | 1977 | let aA = lastBlock.timestamp | |
1959 | - | let | |
1960 | - | let | |
1961 | - | let | |
1962 | - | if (( | |
1978 | + | let cm = ce(dn, ck) | |
1979 | + | let cg = cm[ca] | |
1980 | + | let ch = cm[cb] | |
1981 | + | if ((jx[bs] != "T")) | |
1963 | 1982 | then false | |
1964 | - | else if (if (if ((parseIntValue( | |
1965 | - | then ( | |
1983 | + | else if (if (if ((parseIntValue(jx[br]) == ck)) | |
1984 | + | then (ch[cd] == "INPROGRESS") | |
1966 | 1985 | else false) | |
1967 | - | then (parseIntValue( | |
1986 | + | then (parseIntValue(cg[cc]) > aA) | |
1968 | 1987 | else false) | |
1969 | 1988 | then throw("Your duck is taking part in the tournament") | |
1970 | - | else | |
1971 | - | } | |
1972 | - | ||
1973 | - | ||
1974 | - | func | |
1975 | - | let | |
1989 | + | else dL(invoke(this, "exitTournamentInternal", [B], nil)) | |
1990 | + | } | |
1991 | + | ||
1992 | + | ||
1993 | + | func ky (B) = { | |
1994 | + | let jx = split(valueOrElse(getString(bP(B)), aN), "_") | |
1976 | 1995 | let aA = lastBlock.timestamp | |
1977 | - | if (( | |
1996 | + | if ((jx[bs] != "D")) | |
1978 | 1997 | then false | |
1979 | 1998 | else { | |
1980 | - | let | |
1981 | - | let | |
1982 | - | if (if ((( | |
1983 | - | then (1 > | |
1999 | + | let co = parseIntValue(jx[br]) | |
2000 | + | let cp = parseIntValue(jx[bt]) | |
2001 | + | if (if (((co + aR) > aA)) | |
2002 | + | then (1 > cp) | |
1984 | 2003 | else false) | |
1985 | 2004 | then throw("Your duck is on delivery mission") | |
1986 | - | else | |
1987 | - | } | |
1988 | - | } | |
1989 | - | ||
1990 | - | ||
1991 | - | func | |
1992 | - | let | |
2005 | + | else dL(invoke(this, "exitDeliveryInternal", [B], nil)) | |
2006 | + | } | |
2007 | + | } | |
2008 | + | ||
2009 | + | ||
2010 | + | func kz (B,fQ,jc,kA) = { | |
2011 | + | let jx = split(valueOrElse(getString(bP(B)), aN), "_") | |
1993 | 2012 | let aA = lastBlock.timestamp | |
1994 | - | let | |
1995 | - | let | |
1996 | - | let | |
1997 | - | let | |
1998 | - | let | |
1999 | - | let | |
2013 | + | let co = parseIntValue(jx[br]) | |
2014 | + | let cp = parseIntValue(jx[bt]) | |
2015 | + | let jC = valueOrErrorMessage(getString(bM(B)), "NFT duck is orphaned") | |
2016 | + | let kB = A(B) | |
2017 | + | let kC = getIntegerValue(kB) | |
2018 | + | let kD = if (if ((cp > 0)) | |
2000 | 2019 | then true | |
2001 | - | else if (if ( | |
2002 | - | then ( | |
2020 | + | else if (if (fQ) | |
2021 | + | then (kA > 0) | |
2003 | 2022 | else false) | |
2004 | - | then ( | |
2023 | + | then (jc > 0) | |
2005 | 2024 | else false) | |
2006 | 2025 | then { | |
2007 | - | let | |
2008 | - | if (( | |
2026 | + | let kE = invoke(dk, "sendDeliveryReward", [jC], nil) | |
2027 | + | if ((kE == kE)) | |
2009 | 2028 | then { | |
2010 | - | let | |
2011 | - | [IntegerEntry( | |
2029 | + | let kF = V(jC) | |
2030 | + | [IntegerEntry(kF, (valueOrElse(getInteger(kF), 0) + 1)), IntegerEntry(W(jC), (co / a))] | |
2012 | 2031 | } | |
2013 | 2032 | else throw("Strict value is not equal to itself.") | |
2014 | 2033 | } | |
2015 | - | else if (if (if ( | |
2016 | - | then ( | |
2034 | + | else if (if (if (fQ) | |
2035 | + | then (jc > 0) | |
2017 | 2036 | else false) | |
2018 | - | then (( | |
2037 | + | then ((co + aR) > aA) | |
2019 | 2038 | else false) | |
2020 | 2039 | then throw("Your duck is still on delivery mission") | |
2021 | 2040 | else { | |
2022 | - | let | |
2023 | - | let | |
2024 | - | if (( | |
2025 | - | then if (if (if ( | |
2026 | - | then (0 >= | |
2041 | + | let kG = valueOrElse(getInteger(dk, bU), 0) | |
2042 | + | let kH = invoke(dk, "updateDeliveryLocked", [(kG - aQ)], nil) | |
2043 | + | if ((kH == kH)) | |
2044 | + | then if (if (if (fQ) | |
2045 | + | then (0 >= jc) | |
2027 | 2046 | else false) | |
2028 | 2047 | then true | |
2029 | - | else (0 >= | |
2048 | + | else (0 >= kC)) | |
2030 | 2049 | then nil | |
2031 | - | else [IntegerEntry(U(B), ( | |
2050 | + | else [IntegerEntry(U(B), (co + cJ))] | |
2032 | 2051 | else throw("Strict value is not equal to itself.") | |
2033 | 2052 | } | |
2034 | - | let | |
2035 | - | $Tuple3( | |
2036 | - | } | |
2037 | - | ||
2038 | - | ||
2039 | - | func | |
2040 | - | let B = valueOrErrorMessage(getString( | |
2041 | - | if ( | |
2053 | + | let kI = getStringValue(L(B)) | |
2054 | + | $Tuple3(kD, [StringEntry(bP(B), kI)], kI) | |
2055 | + | } | |
2056 | + | ||
2057 | + | ||
2058 | + | func kJ (kK,ao,kL,c,kM,kN) = { | |
2059 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
2060 | + | if (kx(B)) | |
2042 | 2061 | then throw("mergeInternal_checkTournament") | |
2043 | - | else if ( | |
2062 | + | else if (ky(B)) | |
2044 | 2063 | then throw("mergeInternal_checkDelivery") | |
2045 | 2064 | else { | |
2046 | - | func | |
2047 | - | let | |
2048 | - | let | |
2049 | - | let | |
2050 | - | let | |
2051 | - | if (( | |
2065 | + | func kO (eY,Q) = { | |
2066 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
2067 | + | let jA = bx(Q) | |
2068 | + | let jB = valueOrErrorMessage(getInteger(jA), (("NFT " + jz.name) + " is not staked")) | |
2069 | + | let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned")) | |
2070 | + | if ((jC != c)) | |
2052 | 2071 | then throw((aF + " is not yours")) | |
2053 | 2072 | else { | |
2054 | - | let | |
2055 | - | let | |
2056 | - | if (if (( | |
2057 | - | then ( | |
2073 | + | let jD = split(jz.description, "_") | |
2074 | + | let dB = jD[ds] | |
2075 | + | if (if ((eY._3 != "")) | |
2076 | + | then (eY._3 != dB) | |
2058 | 2077 | else false) | |
2059 | 2078 | then throw("Lands should be on the same continent to merge") | |
2060 | 2079 | else { | |
2061 | - | let | |
2062 | - | let | |
2063 | - | let | |
2064 | - | let | |
2065 | - | let | |
2066 | - | let | |
2067 | - | let | |
2068 | - | let | |
2069 | - | let | |
2070 | - | if (("S" == | |
2080 | + | let dN = jD[dq] | |
2081 | + | let kP = eY._1 | |
2082 | + | let gR = valueOrErrorMessage(indexOf(kP, dN), "You haven't passed all the lands needed") | |
2083 | + | let kQ = (take(kP, gR) + drop(kP, (gR + 1))) | |
2084 | + | let jp = dM(dN) | |
2085 | + | let kR = (eY._2 + valueOrElse(getInteger(by(aI, Q)), 0)) | |
2086 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
2087 | + | let kS = { | |
2088 | + | let cF = dN | |
2089 | + | if (("S" == cF)) | |
2071 | 2090 | then 3 | |
2072 | - | else if (("M" == | |
2091 | + | else if (("M" == cF)) | |
2073 | 2092 | then 4 | |
2074 | - | else if (("L" == | |
2093 | + | else if (("L" == cF)) | |
2075 | 2094 | then 5 | |
2076 | - | else if (("XL" == | |
2095 | + | else if (("XL" == cF)) | |
2077 | 2096 | then 6 | |
2078 | 2097 | else throw("Only S, M, L, XL can merge") | |
2079 | 2098 | } | |
2080 | - | if (( | |
2099 | + | if ((ih != kS)) | |
2081 | 2100 | then throw("All lands should be maxed to merge") | |
2082 | 2101 | else { | |
2083 | - | let | |
2084 | - | let | |
2085 | - | let | |
2086 | - | if ((0 > | |
2087 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
2102 | + | let ez = jD[dp] | |
2103 | + | let gN = gT(jD[dr]) | |
2104 | + | let gX = (lastBlock.timestamp - jB) | |
2105 | + | if ((0 > gX)) | |
2106 | + | then throw(((("Saved timestamp is in future, saved = " + toString(jB)) + ", current = ") + toString(lastBlock.timestamp))) | |
2088 | 2107 | else { | |
2089 | - | let | |
2090 | - | let | |
2091 | - | let | |
2092 | - | let | |
2093 | - | let | |
2094 | - | let | |
2095 | - | let | |
2096 | - | let | |
2097 | - | if (!(isDefined( | |
2108 | + | let jF = jo(Q, jp) | |
2109 | + | let ig = (jp / cN) | |
2110 | + | let jN = gV(split(eY._4, "_"), gN, gX, ig, jF) | |
2111 | + | let fi = gL(eY._6, gN, ig, -1) | |
2112 | + | let kT = gL(eY._10, gN, ig, -1) | |
2113 | + | let hB = gL(eY._9, gN, ig, 1) | |
2114 | + | let kU = eY._7 | |
2115 | + | let di = indexOf(kU, Q) | |
2116 | + | if (!(isDefined(di))) | |
2098 | 2117 | then throw(("Your staked lands don't contain " + Q)) | |
2099 | 2118 | else { | |
2100 | - | let | |
2101 | - | let | |
2102 | - | $Tuple10( | |
2103 | - | then [DeleteEntry( | |
2104 | - | else nil)), | |
2119 | + | let kV = bw(Q) | |
2120 | + | let kW = valueOrElse(getString(kV), "") | |
2121 | + | $Tuple10(kQ, kR, dB, jN, ((((((((((((eY._5 :+ DeleteEntry(bx(Q))) :+ DeleteEntry(bA(aF, Q, c))) :+ DeleteEntry(ey(ez))) :+ DeleteEntry(bu(Q))) :+ DeleteEntry(bE(Q))) :+ DeleteEntry(eA(Q, c))) :+ DeleteEntry(by(aI, Q))) :+ DeleteEntry(eB(ez))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(kV)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kW != "")) | |
2122 | + | then [DeleteEntry(ew(kW))] | |
2123 | + | else nil)), fi, removeByIndex(kU, value(di)), (eY._8 + jp), hB, kT) | |
2105 | 2124 | } | |
2106 | 2125 | } | |
2107 | 2126 | } | |
2108 | 2127 | } | |
2109 | 2128 | } | |
2110 | 2129 | } | |
2111 | 2130 | ||
2112 | - | let | |
2113 | - | let | |
2114 | - | let | |
2115 | - | let | |
2116 | - | let | |
2117 | - | let | |
2118 | - | then split_51C(value( | |
2131 | + | let hS = bO(B) | |
2132 | + | let iv = hR(hS) | |
2133 | + | let gM = split(valueOrElse(getString(dz()), "0_0_0_0_0_0"), "_") | |
2134 | + | let kX = dC(c) | |
2135 | + | let kY = getString(kX) | |
2136 | + | let kZ = if (isDefined(kY)) | |
2137 | + | then split_51C(value(kY), "_") | |
2119 | 2138 | else nil | |
2120 | - | let | |
2121 | - | let | |
2122 | - | let | |
2123 | - | let | |
2124 | - | let | |
2125 | - | let | |
2126 | - | func | |
2127 | - | then | |
2128 | - | else | |
2129 | - | ||
2130 | - | func | |
2131 | - | then | |
2139 | + | let la = split(value(assetInfo(fromBase58String(kM[0]))).description, "_")[ds] | |
2140 | + | let lb = split(valueOrElse(getString(dA(la)), "0_0_0_0_0_0"), "_") | |
2141 | + | let fj = { | |
2142 | + | let fa = kM | |
2143 | + | let fb = size(fa) | |
2144 | + | let fc = $Tuple10(kL, 0, "", iv[bo], nil, gM, kZ, 0, split("0_0_0_0_0_0", "_"), lb) | |
2145 | + | func fd (fe,ff) = if ((ff >= fb)) | |
2146 | + | then fe | |
2147 | + | else kO(fe, fa[ff]) | |
2148 | + | ||
2149 | + | func fg (fe,ff) = if ((ff >= fb)) | |
2150 | + | then fe | |
2132 | 2151 | else throw("List size exceeds 5") | |
2133 | 2152 | ||
2134 | - | fc | |
2153 | + | fg(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5) | |
2135 | 2154 | } | |
2136 | - | let | |
2137 | - | let | |
2138 | - | let | |
2139 | - | let | |
2140 | - | let | |
2141 | - | let | |
2142 | - | let | |
2143 | - | let | |
2144 | - | let | |
2145 | - | let | |
2146 | - | let | |
2147 | - | $Tuple2(((((((((((((((( | |
2148 | - | then StringEntry( | |
2149 | - | else DeleteEntry( | |
2155 | + | let dB = fj._3 | |
2156 | + | let hv = valueOrErrorMessage(indexOf(aV, dB), ("Unknown continent: " + dB)) | |
2157 | + | let gU = hA(fj._9, (dM(kK) / cN)) | |
2158 | + | let iT = valueOrElse(getInteger(ev()), (eu + 1)) | |
2159 | + | let lc = toString(iT) | |
2160 | + | let iU = Issue(eN(lc, kK), makeString([lc, kK, gU, dB], "_"), 1, 0, false) | |
2161 | + | let bv = calculateAssetId(iU) | |
2162 | + | let ld = toBase58String(bv) | |
2163 | + | let jZ = makeString(fk((kN > 0), split(iv[bp], "_"), kN), "_") | |
2164 | + | let le = dD(c) | |
2165 | + | let lf = valueOrElse(getInteger(le), 0) | |
2166 | + | $Tuple2((((((((((((((((fj._5 :+ (if ((size(fj._7) > 0)) | |
2167 | + | then StringEntry(kX, makeString_11C(fj._7, "_")) | |
2168 | + | else DeleteEntry(kX))) :+ IntegerEntry(le, if ((fj._8 > lf)) | |
2150 | 2169 | then 0 | |
2151 | - | else ( | |
2170 | + | else (lf - fj._8))) :+ IntegerEntry(ev(), (iT + 1))) :+ iU) :+ StringEntry(ey(lc), ld)) :+ StringEntry(bu(ld), c)) :+ StringEntry(eB(lc), c)) :+ IntegerEntry(by(aI, ld), fj._2)) :+ IntegerEntry(bE(ld), ao)) :+ IntegerEntry(eA(ld, c), ao)) :+ StringEntry(hS, makeString([iv[bn], fj._4, jZ, iv[bq]], ":"))) :+ StringEntry(dz(), makeString(fj._6, "_"))) :+ StringEntry(dA(dB), makeString(fj._10, "_"))) :+ StringEntry(bP(B), makeString([dB, "L", ld], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bv)), ld) | |
2152 | 2171 | } | |
2153 | 2172 | } | |
2154 | 2173 | ||
2155 | 2174 | ||
2156 | - | func | |
2157 | - | ||
2158 | - | ||
2159 | - | func | |
2160 | - | ||
2161 | - | ||
2162 | - | func | |
2163 | - | ||
2164 | - | ||
2165 | - | func | |
2166 | - | ||
2167 | - | ||
2168 | - | func | |
2169 | - | let | |
2170 | - | if ((4 == | |
2171 | - | then | |
2172 | - | else if ((3 == | |
2173 | - | then | |
2174 | - | else if ((5 == | |
2175 | - | then | |
2176 | - | else if ((2 == | |
2177 | - | then | |
2175 | + | func lg (c,kM) = kJ("M", 3, "SSSS", c, kM, 0) | |
2176 | + | ||
2177 | + | ||
2178 | + | func lh (c,kM) = kJ("L", 4, "SMM", c, kM, (cH * 4)) | |
2179 | + | ||
2180 | + | ||
2181 | + | func li (c,kM) = kJ("XL", 5, "SSSML", c, kM, (cH * 47)) | |
2182 | + | ||
2183 | + | ||
2184 | + | func lj (c,kM) = kJ("XXL", 6, "LXL", c, kM, (cH * 54)) | |
2185 | + | ||
2186 | + | ||
2187 | + | func lk (c,kM) = { | |
2188 | + | let cF = size(kM) | |
2189 | + | if ((4 == cF)) | |
2190 | + | then lg(c, kM) | |
2191 | + | else if ((3 == cF)) | |
2192 | + | then lh(c, kM) | |
2193 | + | else if ((5 == cF)) | |
2194 | + | then li(c, kM) | |
2195 | + | else if ((2 == cF)) | |
2196 | + | then lj(c, kM) | |
2178 | 2197 | else throw("Unknown merge") | |
2179 | 2198 | } | |
2180 | 2199 | ||
2181 | 2200 | ||
2182 | - | func | |
2183 | - | let | |
2184 | - | if (isDefined( | |
2201 | + | func ll (bR) = { | |
2202 | + | let lm = getString(bN(bR)) | |
2203 | + | if (isDefined(lm)) | |
2185 | 2204 | then { | |
2186 | - | let B = value( | |
2187 | - | let | |
2188 | - | let | |
2189 | - | let | |
2190 | - | if (if (( | |
2205 | + | let B = value(lm) | |
2206 | + | let ln = bP(B) | |
2207 | + | let cl = split(valueOrElse(getString(ln), aN), "_") | |
2208 | + | let co = parseIntValue(cl[br]) | |
2209 | + | if (if ((cl[bs] != "D")) | |
2191 | 2210 | then true | |
2192 | - | else (( | |
2211 | + | else ((co + aR) > lastBlock.timestamp)) | |
2193 | 2212 | then nil | |
2194 | 2213 | else { | |
2195 | - | let | |
2196 | - | if ((parseIntValue( | |
2214 | + | let kB = A(B) | |
2215 | + | if ((parseIntValue(cl[bt]) > 0)) | |
2197 | 2216 | then { | |
2198 | - | let | |
2199 | - | if (( | |
2217 | + | let kE = invoke(dk, "sendDeliveryReward", [bR], nil) | |
2218 | + | if ((kE == kE)) | |
2200 | 2219 | then nil | |
2201 | 2220 | else throw("Strict value is not equal to itself.") | |
2202 | 2221 | } | |
2203 | 2222 | else ({ | |
2204 | - | let | |
2205 | - | let | |
2206 | - | if (( | |
2207 | - | then if ((0 >= getIntegerValue( | |
2223 | + | let kG = valueOrElse(getInteger(dk, bU), 0) | |
2224 | + | let kH = invoke(dk, "updateDeliveryLocked", [(kG - aQ)], nil) | |
2225 | + | if ((kH == kH)) | |
2226 | + | then if ((0 >= getIntegerValue(kB))) | |
2208 | 2227 | then nil | |
2209 | 2228 | else { | |
2210 | - | let | |
2211 | - | if (( | |
2229 | + | let lo = invoke(this, "saveInteger", [U(B), (co + cJ)], nil) | |
2230 | + | if ((lo == lo)) | |
2212 | 2231 | then nil | |
2213 | 2232 | else throw("Strict value is not equal to itself.") | |
2214 | 2233 | } | |
2215 | 2234 | else throw("Strict value is not equal to itself.") | |
2216 | - | } :+ StringEntry( | |
2235 | + | } :+ StringEntry(ln, getStringValue(L(B)))) | |
2217 | 2236 | } | |
2218 | 2237 | } | |
2219 | 2238 | else nil | |
2220 | 2239 | } | |
2221 | 2240 | ||
2222 | 2241 | ||
2223 | - | func | |
2224 | - | then valueOrElse(getBoolean( | |
2242 | + | func lp (gR) = if (if ((gR.originCaller != dj)) | |
2243 | + | then valueOrElse(getBoolean(dP()), false) | |
2225 | 2244 | else false) | |
2226 | 2245 | then throw("Contracts are under maintenance") | |
2227 | 2246 | else { | |
2228 | - | let | |
2229 | - | ( | |
2247 | + | let bR = toString(gR.originCaller) | |
2248 | + | (ll(bR) :+ StringEntry(dQ(bR), toBase58String(gR.transactionId))) | |
2230 | 2249 | } | |
2231 | 2250 | ||
2232 | 2251 | ||
2233 | - | func | |
2234 | - | then valueOrElse(getBoolean( | |
2252 | + | func lq (gR) = if (if ((gR.originCaller != dj)) | |
2253 | + | then valueOrElse(getBoolean(dP()), false) | |
2235 | 2254 | else false) | |
2236 | 2255 | then throw("Contracts are under maintenance") | |
2237 | - | else [StringEntry( | |
2238 | - | ||
2239 | - | ||
2240 | - | @Callable( | |
2241 | - | func constructorV1 ( | |
2256 | + | else [StringEntry(dQ(toString(gR.originCaller)), toBase58String(gR.transactionId))] | |
2257 | + | ||
2258 | + | ||
2259 | + | @Callable(gR) | |
2260 | + | func constructorV1 (lr) = if ((gR.caller != this)) | |
2242 | 2261 | then throw("Permission denied") | |
2243 | - | else [StringEntry( | |
2244 | - | ||
2245 | - | ||
2246 | - | ||
2247 | - | @Callable( | |
2248 | - | func saveInteger ( | |
2262 | + | else [StringEntry(dd(), lr)] | |
2263 | + | ||
2264 | + | ||
2265 | + | ||
2266 | + | @Callable(gR) | |
2267 | + | func saveInteger (cV,eP) = if ((gR.caller != this)) | |
2249 | 2268 | then throw("saveInteger is not public method") | |
2250 | - | else [IntegerEntry( | |
2251 | - | ||
2252 | - | ||
2253 | - | ||
2254 | - | @Callable( | |
2255 | - | func setBlocked ( | |
2269 | + | else [IntegerEntry(cV, eP)] | |
2270 | + | ||
2271 | + | ||
2272 | + | ||
2273 | + | @Callable(gR) | |
2274 | + | func setBlocked (ls) = if ((gR.caller != this)) | |
2256 | 2275 | then throw("permission denied") | |
2257 | - | else [BooleanEntry( | |
2258 | - | ||
2259 | - | ||
2260 | - | ||
2261 | - | @Callable( | |
2276 | + | else [BooleanEntry(dP(), ls)] | |
2277 | + | ||
2278 | + | ||
2279 | + | ||
2280 | + | @Callable(gR) | |
2262 | 2281 | func stakeLand () = { | |
2263 | - | let | |
2264 | - | if ((size( | |
2282 | + | let lt = lp(gR) | |
2283 | + | if ((size(gR.payments) != 1)) | |
2265 | 2284 | then throw("Exactly one payment required") | |
2266 | 2285 | else { | |
2267 | - | let | |
2268 | - | let | |
2269 | - | let | |
2270 | - | if (( | |
2286 | + | let lu = value(gR.payments[0]) | |
2287 | + | let bv = value(lu.assetId) | |
2288 | + | let cU = toString(gR.caller) | |
2289 | + | if ((lu.amount != 1)) | |
2271 | 2290 | then throw((("NFT " + aF) + " token should be attached as payment")) | |
2272 | 2291 | else { | |
2273 | - | let | |
2274 | - | if (( | |
2292 | + | let jz = value(assetInfo(bv)) | |
2293 | + | if ((jz.issuer != this)) | |
2275 | 2294 | then throw("Unknown issuer of token") | |
2276 | - | else if (!(contains( | |
2295 | + | else if (!(contains(jz.name, aF))) | |
2277 | 2296 | then throw((("Only NFT " + aF) + " tokens are accepted")) | |
2278 | 2297 | else { | |
2279 | - | let | |
2280 | - | let | |
2281 | - | then dropRight( | |
2282 | - | else if (contains( | |
2283 | - | then dropRight( | |
2284 | - | else dropRight( | |
2285 | - | if (!(isDefined(parseInt( | |
2286 | - | then throw(("Cannot parse land number from " + | |
2298 | + | let lv = drop(jz.name, 4) | |
2299 | + | let ez = if (contains(lv, "XXL")) | |
2300 | + | then dropRight(lv, 3) | |
2301 | + | else if (contains(lv, "XL")) | |
2302 | + | then dropRight(lv, 2) | |
2303 | + | else dropRight(lv, 1) | |
2304 | + | if (!(isDefined(parseInt(ez)))) | |
2305 | + | then throw(("Cannot parse land number from " + jz.name)) | |
2287 | 2306 | else { | |
2288 | - | let Q = toBase58String( | |
2289 | - | let | |
2290 | - | if (isDefined(getInteger( | |
2291 | - | then throw((("NFT " + | |
2307 | + | let Q = toBase58String(bv) | |
2308 | + | let jA = bx(Q) | |
2309 | + | if (isDefined(getInteger(jA))) | |
2310 | + | then throw((("NFT " + jz.name) + " is already staked")) | |
2292 | 2311 | else { | |
2293 | - | let | |
2294 | - | let | |
2295 | - | let | |
2296 | - | let | |
2297 | - | let | |
2298 | - | let | |
2299 | - | let | |
2300 | - | let | |
2301 | - | let | |
2302 | - | let | |
2303 | - | let | |
2304 | - | then split_51C(value( | |
2312 | + | let jD = split(jz.description, "_") | |
2313 | + | let gN = gT(jD[dr]) | |
2314 | + | let jp = dM(jD[dq]) | |
2315 | + | let ig = (jp / cN) | |
2316 | + | let fi = gS(gN, ig, 1) | |
2317 | + | let lw = dA(jD[ds]) | |
2318 | + | let lb = split(valueOrElse(getString(lw), "0_0_0_0_0_0"), "_") | |
2319 | + | let lx = makeString(gL(lb, gN, ig, 1), "_") | |
2320 | + | let kX = dC(cU) | |
2321 | + | let kY = getString(kX) | |
2322 | + | let kU = if (isDefined(kY)) | |
2323 | + | then split_51C(value(kY), "_") | |
2305 | 2324 | else nil | |
2306 | - | if (containsElement( | |
2325 | + | if (containsElement(kU, Q)) | |
2307 | 2326 | then throw(("Your staked lands already contain " + Q)) | |
2308 | - | else if ((size( | |
2309 | - | then throw((("Your already staked max (" + toString( | |
2327 | + | else if ((size(kU) >= aK)) | |
2328 | + | then throw((("Your already staked max (" + toString(aK)) + ") lands")) | |
2310 | 2329 | else { | |
2311 | - | let | |
2312 | - | let | |
2313 | - | let | |
2314 | - | let | |
2315 | - | $Tuple2(([IntegerEntry( | |
2330 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
2331 | + | let le = dD(cU) | |
2332 | + | let ly = valueOrElse(getInteger(le), 0) | |
2333 | + | let lz = invoke(dm, "onStakeUnstakeLand", [cU], nil) | |
2334 | + | $Tuple2(([IntegerEntry(jA, lastBlock.timestamp), IntegerEntry(bA(aF, Q, cU), lastBlock.timestamp), StringEntry(kX, makeString_11C((kU :+ Q), "_")), IntegerEntry(le, (ly + jp)), StringEntry(bu(Q), cU), StringEntry(eB(ez), cU), IntegerEntry(eA(Q, cU), ih), StringEntry(dz(), fi), StringEntry(lw, lx)] ++ lt), lz) | |
2316 | 2335 | } | |
2317 | 2336 | } | |
2318 | 2337 | } | |
2319 | 2338 | } | |
2320 | 2339 | } | |
2321 | 2340 | } | |
2322 | 2341 | } | |
2323 | 2342 | ||
2324 | 2343 | ||
2325 | 2344 | ||
2326 | - | @Callable( | |
2327 | - | func unstakeLand ( | |
2328 | - | let | |
2329 | - | if ((size( | |
2345 | + | @Callable(gR) | |
2346 | + | func unstakeLand (jv) = { | |
2347 | + | let lt = lp(gR) | |
2348 | + | if ((size(gR.payments) != 0)) | |
2330 | 2349 | then throw("No payments required") | |
2331 | 2350 | else { | |
2332 | - | let c = toString( | |
2333 | - | let | |
2334 | - | let Q = | |
2335 | - | let | |
2336 | - | let | |
2337 | - | let | |
2338 | - | let | |
2339 | - | let | |
2340 | - | let | |
2341 | - | let | |
2342 | - | let | |
2343 | - | let | |
2344 | - | let | |
2345 | - | let | |
2346 | - | let | |
2347 | - | if (!(isDefined( | |
2351 | + | let c = toString(gR.caller) | |
2352 | + | let gh = jt(c, eH, jv) | |
2353 | + | let Q = gh._2 | |
2354 | + | let jD = gh._3 | |
2355 | + | let kX = dC(c) | |
2356 | + | let gN = gT(jD[dr]) | |
2357 | + | let jp = dM(jD[dq]) | |
2358 | + | let ig = (jp / cN) | |
2359 | + | let fi = gS(gN, ig, -1) | |
2360 | + | let lw = dA(jD[ds]) | |
2361 | + | let lb = split(valueOrElse(getString(lw), "0_0_0_0_0_0"), "_") | |
2362 | + | let lx = makeString(gL(lb, gN, ig, -1), "_") | |
2363 | + | let ka = jQ(c, Q, jp, eH) | |
2364 | + | let kU = split_51C(valueOrElse(getString(kX), ""), "_") | |
2365 | + | let di = indexOf(kU, Q) | |
2366 | + | if (!(isDefined(di))) | |
2348 | 2367 | then throw(("Your staked lands don't contain " + Q)) | |
2349 | 2368 | else { | |
2350 | 2369 | let aA = lastBlock.timestamp | |
2351 | - | let | |
2352 | - | if (( | |
2353 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2370 | + | let lA = valueOrElse(getInteger(dl, bQ(c)), 0) | |
2371 | + | if ((lA >= aA)) | |
2372 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lA))) | |
2354 | 2373 | else { | |
2355 | - | let | |
2356 | - | if (( | |
2357 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2374 | + | let lB = (valueOrElse(getInteger(dm, b(c)), 0) + cI) | |
2375 | + | if ((lB > aA)) | |
2376 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(lB))) | |
2358 | 2377 | else { | |
2359 | - | let | |
2360 | - | let | |
2361 | - | let | |
2378 | + | let le = dD(c) | |
2379 | + | let lf = valueOrElse(getInteger(le), 0) | |
2380 | + | let lC = if ((jp > lf)) | |
2362 | 2381 | then 0 | |
2363 | - | else ( | |
2364 | - | let | |
2365 | - | $Tuple2(([ScriptTransfer( | |
2366 | - | then StringEntry( | |
2367 | - | else DeleteEntry( | |
2382 | + | else (lf - jp) | |
2383 | + | let lz = invoke(dm, "onStakeUnstakeLand", [c], nil) | |
2384 | + | $Tuple2(([ScriptTransfer(gR.caller, 1, fromBase58String(Q)), DeleteEntry(bx(Q)), DeleteEntry(bA(aF, Q, c)), StringEntry(dz(), fi), StringEntry(lw, lx), StringEntry(ka._2, makeString(ka._3, ":")), if ((size(kU) > 1)) | |
2385 | + | then StringEntry(kX, makeString_11C(removeByIndex(kU, value(di)), "_")) | |
2386 | + | else DeleteEntry(kX), IntegerEntry(le, lC)] ++ lt), lz) | |
2368 | 2387 | } | |
2369 | 2388 | } | |
2370 | 2389 | } | |
2371 | 2390 | } | |
2372 | 2391 | } | |
2373 | 2392 | ||
2374 | 2393 | ||
2375 | 2394 | ||
2376 | - | @Callable( | |
2395 | + | @Callable(gR) | |
2377 | 2396 | func stakeDuck () = { | |
2378 | - | let | |
2379 | - | if ((size( | |
2397 | + | let lt = lp(gR) | |
2398 | + | if ((size(gR.payments) != 1)) | |
2380 | 2399 | then throw("Exactly one payment required") | |
2381 | 2400 | else { | |
2382 | - | let | |
2383 | - | let | |
2384 | - | let | |
2385 | - | if (( | |
2401 | + | let lu = value(gR.payments[0]) | |
2402 | + | let bv = value(lu.assetId) | |
2403 | + | let cU = toString(gR.caller) | |
2404 | + | if ((lu.amount != 1)) | |
2386 | 2405 | then throw((("NFT " + aG) + " token should be attached as payment")) | |
2387 | 2406 | else { | |
2388 | - | let | |
2389 | - | if (if ( | |
2390 | - | then ( | |
2407 | + | let jz = value(assetInfo(bv)) | |
2408 | + | let lD = if (if (cB) | |
2409 | + | then (jz.issuer == this) | |
2391 | 2410 | else false) | |
2392 | - | then throw((("Unknown issuer of " + aG) + " token")) | |
2393 | - | else if (!(contains(jv.name, aG))) | |
2394 | - | then throw((("Only NFT " + aG) + " tokens are accepted")) | |
2411 | + | then contains(jz.name, aH) | |
2412 | + | else false | |
2413 | + | if (if (if ((jz.issuer != ec)) | |
2414 | + | then (jz.issuer != ed) | |
2415 | + | else false) | |
2416 | + | then !(lD) | |
2417 | + | else false) | |
2418 | + | then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token")) | |
2419 | + | else if (if (!(contains(jz.name, aG))) | |
2420 | + | then !(lD) | |
2421 | + | else false) | |
2422 | + | then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted")) | |
2395 | 2423 | else { | |
2396 | - | let | |
2397 | - | let | |
2398 | - | if (isDefined(getInteger( | |
2399 | - | then throw((("NFT " + | |
2400 | - | else if (isDefined(getString( | |
2401 | - | then throw(("You already staked one duck: " + | |
2424 | + | let lE = toBase58String(bv) | |
2425 | + | let jA = bx(lE) | |
2426 | + | if (isDefined(getInteger(jA))) | |
2427 | + | then throw((("NFT " + jz.name) + " is already staked")) | |
2428 | + | else if (isDefined(getString(bN(cU)))) | |
2429 | + | then throw(("You already staked one duck: " + jz.name)) | |
2402 | 2430 | else { | |
2403 | - | let | |
2404 | - | let | |
2405 | - | let | |
2406 | - | let | |
2407 | - | let | |
2408 | - | let | |
2409 | - | let | |
2410 | - | ([IntegerEntry( | |
2431 | + | let ln = bP(lE) | |
2432 | + | let cj = getString(ln) | |
2433 | + | let hS = bO(lE) | |
2434 | + | let lF = getString(hS) | |
2435 | + | let ji = A(lE) | |
2436 | + | let jj = aj(valueOrElse(getInteger(E(lE)), 0)) | |
2437 | + | let kC = valueOrElse(getInteger(ji), jj) | |
2438 | + | ([IntegerEntry(jA, lastBlock.timestamp), IntegerEntry(bA(aG, toBase58String(bv), cU), lastBlock.timestamp), StringEntry(bM(lE), cU), StringEntry(bN(cU), lE)] ++ (if (isDefined(cj)) | |
2411 | 2439 | then nil | |
2412 | - | else ([StringEntry( | |
2440 | + | else ([StringEntry(ln, aN)] ++ (if (isDefined(lF)) | |
2413 | 2441 | then nil | |
2414 | - | else (([StringEntry( | |
2442 | + | else (([StringEntry(hS, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ji, kC)) ++ lt))))) | |
2415 | 2443 | } | |
2416 | 2444 | } | |
2417 | 2445 | } | |
2418 | 2446 | } | |
2419 | 2447 | } | |
2420 | 2448 | ||
2421 | 2449 | ||
2422 | 2450 | ||
2423 | - | @Callable( | |
2424 | - | func unstakeDuck ( | |
2425 | - | let | |
2426 | - | if ((size( | |
2451 | + | @Callable(gR) | |
2452 | + | func unstakeDuck (lE) = { | |
2453 | + | let lt = lp(gR) | |
2454 | + | if ((size(gR.payments) != 0)) | |
2427 | 2455 | then throw("No payments required") | |
2428 | 2456 | else { | |
2429 | - | let | |
2430 | - | let | |
2431 | - | let | |
2432 | - | let | |
2433 | - | if (!(isDefined(getInteger( | |
2434 | - | then throw((("NFT " + | |
2435 | - | else if (!(isDefined(getString( | |
2436 | - | then throw((("The duck " + | |
2457 | + | let bv = fromBase58String(lE) | |
2458 | + | let cU = toString(gR.caller) | |
2459 | + | let jz = value(assetInfo(bv)) | |
2460 | + | let jA = bx(lE) | |
2461 | + | if (!(isDefined(getInteger(jA)))) | |
2462 | + | then throw((("NFT " + jz.name) + " is not staked")) | |
2463 | + | else if (!(isDefined(getString(bN(cU))))) | |
2464 | + | then throw((("The duck " + jz.name) + " is not staked")) | |
2437 | 2465 | else { | |
2438 | - | let | |
2439 | - | if (( | |
2466 | + | let jC = valueOrErrorMessage(getString(bM(lE)), (("NFT " + jz.name) + " is orphaned")) | |
2467 | + | if ((jC != cU)) | |
2440 | 2468 | then throw("Staked NFT is not yours") | |
2441 | - | else if ( | |
2469 | + | else if (kx(lE)) | |
2442 | 2470 | then throw("unstakeDuck_checkTournament") | |
2443 | - | else if ( | |
2471 | + | else if (ky(lE)) | |
2444 | 2472 | then throw("unstakeDuck_checkDelivery") | |
2445 | 2473 | else { | |
2446 | - | let | |
2447 | - | let | |
2448 | - | let av = valueOrElse(getInteger( | |
2449 | - | if (( | |
2450 | - | then throw((("Please heal your duck to " + toString( | |
2451 | - | else ([ScriptTransfer( | |
2474 | + | let ji = A(lE) | |
2475 | + | let jj = aj(valueOrElse(getInteger(E(lE)), 0)) | |
2476 | + | let av = valueOrElse(getInteger(ji), jj) | |
2477 | + | if ((jj > av)) | |
2478 | + | then throw((("Please heal your duck to " + toString(jj)) + "hp before unstaking")) | |
2479 | + | else ([ScriptTransfer(gR.caller, 1, bv), DeleteEntry(jA), DeleteEntry(ji), DeleteEntry(bP(lE)), DeleteEntry(bM(lE)), DeleteEntry(bA(aG, lE, cU)), DeleteEntry(bN(cU))] ++ lt) | |
2452 | 2480 | } | |
2453 | 2481 | } | |
2454 | 2482 | } | |
2455 | 2483 | } | |
2456 | 2484 | ||
2457 | 2485 | ||
2458 | 2486 | ||
2459 | - | @Callable( | |
2460 | - | func claimRes ( | |
2461 | - | let | |
2462 | - | if ((size( | |
2487 | + | @Callable(gR) | |
2488 | + | func claimRes (eP,lG) = { | |
2489 | + | let lt = lp(gR) | |
2490 | + | if ((size(gR.payments) != 0)) | |
2463 | 2491 | then throw("No payments required") | |
2464 | 2492 | else { | |
2465 | - | let c = toString( | |
2466 | - | let | |
2467 | - | let B = valueOrErrorMessage(getString( | |
2468 | - | $Tuple2((((( | |
2469 | - | } | |
2470 | - | } | |
2471 | - | ||
2472 | - | ||
2473 | - | ||
2474 | - | @Callable( | |
2475 | - | func claimResToWH ( | |
2476 | - | let | |
2477 | - | if ((size( | |
2493 | + | let c = toString(gR.originCaller) | |
2494 | + | let fq = jE(c, eP, eH, lG) | |
2495 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
2496 | + | $Tuple2(((((fq._1 ++ km(B, fraction(X, eP, cM))._1) :+ StringEntry(fq._2, makeString(fq._3, ":"))) :+ StringEntry(fq._4, makeString(fq._5, ":"))) ++ lt), fq._3[bo]) | |
2497 | + | } | |
2498 | + | } | |
2499 | + | ||
2500 | + | ||
2501 | + | ||
2502 | + | @Callable(gR) | |
2503 | + | func claimResToWH (eP,lG) = { | |
2504 | + | let lt = lp(gR) | |
2505 | + | if ((size(gR.payments) != 0)) | |
2478 | 2506 | then throw("No payments required") | |
2479 | 2507 | else { | |
2480 | - | let c = toString( | |
2481 | - | let | |
2482 | - | $Tuple2((((( | |
2483 | - | } | |
2484 | - | } | |
2485 | - | ||
2486 | - | ||
2487 | - | ||
2488 | - | @Callable( | |
2489 | - | func flight ( | |
2490 | - | let | |
2491 | - | if ((size( | |
2508 | + | let c = toString(gR.originCaller) | |
2509 | + | let fq = jE(c, eP, eG, lG) | |
2510 | + | $Tuple2(((((fq._1 ++ kn(c, fraction(X, eP, cM))._1) :+ StringEntry(fq._2, makeString(fq._3, ":"))) :+ StringEntry(fq._4, makeString(fq._5, ":"))) ++ lt), fq._5[bf]) | |
2511 | + | } | |
2512 | + | } | |
2513 | + | ||
2514 | + | ||
2515 | + | ||
2516 | + | @Callable(gR) | |
2517 | + | func flight (iX,iY) = { | |
2518 | + | let lt = lq(gR) | |
2519 | + | if ((size(gR.payments) != 0)) | |
2492 | 2520 | then throw("No payments required") | |
2493 | 2521 | else { | |
2494 | - | let | |
2495 | - | let | |
2496 | - | let | |
2497 | - | let B = | |
2498 | - | let | |
2499 | - | let | |
2500 | - | let | |
2501 | - | if (( | |
2522 | + | let bR = toString(gR.caller) | |
2523 | + | let hw = iW(bR, iX, iY) | |
2524 | + | let jc = hw._1 | |
2525 | + | let B = hw._2 | |
2526 | + | let ln = bP(B) | |
2527 | + | let jx = valueOrElse(getString(ln), aN) | |
2528 | + | let je = hw._4 | |
2529 | + | if ((je == jx)) | |
2502 | 2530 | then throw("You can't fly to the same location") | |
2503 | 2531 | else { | |
2504 | - | let | |
2505 | - | let | |
2506 | - | let | |
2507 | - | let | |
2508 | - | let | |
2509 | - | let | |
2510 | - | let | |
2511 | - | let | |
2512 | - | let | |
2513 | - | then if (!( | |
2514 | - | then | |
2515 | - | else if (( | |
2516 | - | then $Tuple2( | |
2517 | - | else $Tuple2( | |
2518 | - | else if ( | |
2519 | - | then if (!( | |
2532 | + | let cx = split(je, "_") | |
2533 | + | let lH = (cx[bs] == "T") | |
2534 | + | let lI = (cx[bs] == "D") | |
2535 | + | let gE = G(B) | |
2536 | + | let lJ = valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2537 | + | let lK = fr(lJ, hw._5) | |
2538 | + | let lL = lK._1 | |
2539 | + | let lM = lK._2 | |
2540 | + | let lN = if (!(cs(dn, jx))) | |
2541 | + | then if (!(cq(je))) | |
2542 | + | then cv(jx, je, 5) | |
2543 | + | else if ((jc > 0)) | |
2544 | + | then $Tuple2(je, jc) | |
2545 | + | else $Tuple2(jx, 0) | |
2546 | + | else if (ci(dn, jx)) | |
2547 | + | then if (!(ci(dn, je))) | |
2520 | 2548 | then throw("Your duck is taking part in the tournament") | |
2521 | 2549 | else { | |
2522 | - | let | |
2523 | - | let | |
2524 | - | let | |
2525 | - | if (( | |
2526 | - | then | |
2527 | - | else if (( | |
2550 | + | let kA = parseIntValue(cx[bt]) | |
2551 | + | let lO = split(jx, "_") | |
2552 | + | let ck = valueOrElse(getInteger(dn, bV), 0) | |
2553 | + | if ((kA != (parseIntValue(lO[bt]) + 1))) | |
2554 | + | then cv(jx, je, 7) | |
2555 | + | else if ((jc > 0)) | |
2528 | 2556 | then { | |
2529 | - | let | |
2530 | - | let | |
2531 | - | then invoke( | |
2557 | + | let lP = valueOrElse(getInteger(dn, bZ(ck, B)), 0) | |
2558 | + | let lQ = if ((kA > lP)) | |
2559 | + | then invoke(dn, "saveDuckResult", [B, kA], nil) | |
2532 | 2560 | else unit | |
2533 | - | if (( | |
2534 | - | then $Tuple2( | |
2561 | + | if ((lQ == lQ)) | |
2562 | + | then $Tuple2(je, jc) | |
2535 | 2563 | else throw("Strict value is not equal to itself.") | |
2536 | 2564 | } | |
2537 | - | else $Tuple2( | |
2565 | + | else $Tuple2(jx, 0) | |
2538 | 2566 | } | |
2539 | - | else if (!( | |
2567 | + | else if (!(cn(jx))) | |
2540 | 2568 | then { | |
2541 | - | let | |
2569 | + | let lR = dE(invoke(this, "autoExitDelivery", [B, jc, if (lI) | |
2542 | 2570 | then "10" | |
2543 | 2571 | else "11", 0], nil)) | |
2544 | - | if (( | |
2545 | - | then if ( | |
2546 | - | then $Tuple2( | |
2547 | - | else if (( | |
2548 | - | then $Tuple2( | |
2549 | - | else $Tuple2( | |
2572 | + | if ((lR == lR)) | |
2573 | + | then if (lI) | |
2574 | + | then $Tuple2(lR, jc) | |
2575 | + | else if ((jc > 0)) | |
2576 | + | then $Tuple2(je, jc) | |
2577 | + | else $Tuple2(lR, 0) | |
2550 | 2578 | else throw("Strict value is not equal to itself.") | |
2551 | 2579 | } | |
2552 | - | else if (!( | |
2580 | + | else if (!(lI)) | |
2553 | 2581 | then throw("Your duck is taking part in delivery") | |
2554 | - | else if (!( | |
2555 | - | then | |
2582 | + | else if (!(cn(je))) | |
2583 | + | then cv(jx, je, 13) | |
2556 | 2584 | else { | |
2557 | - | let | |
2558 | - | let | |
2559 | - | if (( | |
2560 | - | then | |
2561 | - | else if (if (( | |
2562 | - | then (1 > | |
2585 | + | let kA = parseIntValue(cx[bt]) | |
2586 | + | let lO = split(jx, "_") | |
2587 | + | if ((kA != (parseIntValue(lO[bt]) + 1))) | |
2588 | + | then cv(jx, je, 14) | |
2589 | + | else if (if ((jc > 0)) | |
2590 | + | then (1 > kA) | |
2563 | 2591 | else false) | |
2564 | - | then $Tuple2( | |
2592 | + | then $Tuple2(je, jc) | |
2565 | 2593 | else { | |
2566 | - | let | |
2567 | - | if (( | |
2568 | - | then $Tuple2( | |
2594 | + | let lR = dE(invoke(this, "autoExitDelivery", [B, jc, "15-17", kA], nil)) | |
2595 | + | if ((lR == lR)) | |
2596 | + | then $Tuple2(lR, jc) | |
2569 | 2597 | else throw("Strict value is not equal to itself.") | |
2570 | 2598 | } | |
2571 | 2599 | } | |
2572 | - | let | |
2573 | - | let | |
2574 | - | $Tuple2(((([StringEntry( | |
2600 | + | let lS = lN._1 | |
2601 | + | let lT = lN._2 | |
2602 | + | $Tuple2(((([StringEntry(ln, lS), StringEntry(gE, lL), IntegerEntry(A(B), lT)] ++ lt) ++ (if (lM) | |
2575 | 2603 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2576 | - | else nil)) ++ | |
2604 | + | else nil)) ++ km(B, if ((jc > 0)) | |
2577 | 2605 | then Y | |
2578 | - | else Z)._1), | |
2606 | + | else Z)._1), hw._3) | |
2579 | 2607 | } | |
2580 | 2608 | } | |
2581 | 2609 | } | |
2582 | 2610 | ||
2583 | 2611 | ||
2584 | 2612 | ||
2585 | - | @Callable( | |
2586 | - | func heal ( | |
2587 | - | let | |
2588 | - | if (if (if ((0 > | |
2613 | + | @Callable(gR) | |
2614 | + | func heal (lU,lV,lW) = { | |
2615 | + | let lt = lp(gR) | |
2616 | + | if (if (if ((0 > lU)) | |
2589 | 2617 | then true | |
2590 | - | else (0 > | |
2618 | + | else (0 > lV)) | |
2591 | 2619 | then true | |
2592 | - | else (0 > | |
2620 | + | else (0 > lW)) | |
2593 | 2621 | then throw("Quantity cannot be negative") | |
2594 | 2622 | else { | |
2595 | - | let B = valueOrErrorMessage(getString( | |
2596 | - | if ( | |
2623 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked") | |
2624 | + | if (kx(B)) | |
2597 | 2625 | then throw("heal_checkTournament") | |
2598 | - | else if ( | |
2626 | + | else if (ky(B)) | |
2599 | 2627 | then throw("heal_checkDelivery") | |
2600 | 2628 | else { | |
2601 | - | let | |
2602 | - | let | |
2603 | - | let | |
2604 | - | let | |
2605 | - | if (( | |
2606 | - | then throw((("HP should be < " + toString( | |
2629 | + | let lX = [lU, lV, lW] | |
2630 | + | let ji = A(B) | |
2631 | + | let jj = aj(valueOrElse(getInteger(E(B)), 0)) | |
2632 | + | let lY = valueOrElse(getInteger(ji), jj) | |
2633 | + | if ((lY >= jj)) | |
2634 | + | then throw((("HP should be < " + toString(jj)) + " to heal")) | |
2607 | 2635 | else { | |
2608 | - | let | |
2609 | - | let | |
2610 | - | let | |
2636 | + | let hS = bO(B) | |
2637 | + | let iv = hR(hS) | |
2638 | + | let lZ = if ((iv[bq] == "")) | |
2611 | 2639 | then nil | |
2612 | - | else split_4C( | |
2613 | - | func | |
2614 | - | let | |
2615 | - | let | |
2616 | - | then parseIntValue( | |
2640 | + | else split_4C(iv[bq], "_") | |
2641 | + | func ma (eY,cu) = { | |
2642 | + | let dI = eY._2 | |
2643 | + | let hn = if ((size(lZ) > dI)) | |
2644 | + | then parseIntValue(lZ[dI]) | |
2617 | 2645 | else 0 | |
2618 | - | if ((3 > | |
2646 | + | if ((3 > dI)) | |
2619 | 2647 | then { | |
2620 | - | let | |
2621 | - | if (( | |
2622 | - | then throw(((("You have only " + toString( | |
2623 | - | else $Tuple3(( | |
2648 | + | let mb = lX[dI] | |
2649 | + | if ((mb > hn)) | |
2650 | + | then throw(((("You have only " + toString(hn)) + " of ") + aU[dI])) | |
2651 | + | else $Tuple3((eY._1 :+ toString((hn - mb))), (dI + 1), (eY._3 + (parseIntValue(split(cu, "_")[ba]) * mb))) | |
2624 | 2652 | } | |
2625 | - | else $Tuple3(( | |
2653 | + | else $Tuple3((eY._1 :+ toString(hn)), (dI + 1), eY._3) | |
2626 | 2654 | } | |
2627 | 2655 | ||
2628 | - | let | |
2629 | - | let | |
2630 | - | let | |
2631 | - | let | |
2632 | - | func | |
2633 | - | then | |
2634 | - | else | |
2635 | - | ||
2636 | - | func | |
2637 | - | then | |
2656 | + | let fq = { | |
2657 | + | let fa = aY | |
2658 | + | let fb = size(fa) | |
2659 | + | let fc = $Tuple3(nil, 0, 0) | |
2660 | + | func fd (fe,ff) = if ((ff >= fb)) | |
2661 | + | then fe | |
2662 | + | else ma(fe, fa[ff]) | |
2663 | + | ||
2664 | + | func fg (fe,ff) = if ((ff >= fb)) | |
2665 | + | then fe | |
2638 | 2666 | else throw("List size exceeds 50") | |
2639 | 2667 | ||
2640 | - | fc | |
2668 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 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) | |
2641 | 2669 | } | |
2642 | - | let | |
2643 | - | $Tuple2((([IntegerEntry( | |
2670 | + | let mc = min([jj, (lY + fq._3)]) | |
2671 | + | $Tuple2((([IntegerEntry(ji, mc), StringEntry(hS, makeString_2C([iv[bn], iv[bo], iv[bp], makeString(fq._1, "_")], ":"))] ++ lt) ++ km(B, (ag * ((lU + lV) + lW)))._1), mc) | |
2644 | 2672 | } | |
2645 | 2673 | } | |
2646 | 2674 | } | |
2647 | 2675 | } | |
2648 | 2676 | ||
2649 | 2677 | ||
2650 | 2678 | ||
2651 | - | @Callable( | |
2679 | + | @Callable(gR) | |
2652 | 2680 | func healES () = { | |
2653 | - | let | |
2654 | - | if ((size( | |
2681 | + | let lt = lp(gR) | |
2682 | + | if ((size(gR.payments) != 1)) | |
2655 | 2683 | then throw("Exactly one payment required") | |
2656 | 2684 | else { | |
2657 | - | let | |
2658 | - | if (( | |
2685 | + | let lu = value(gR.payments[0]) | |
2686 | + | if ((lu.assetId != cE)) | |
2659 | 2687 | then throw("Allowed USDT payment only!") | |
2660 | 2688 | else { | |
2661 | - | let B = valueOrErrorMessage(getString( | |
2662 | - | if ( | |
2689 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked") | |
2690 | + | if (kx(B)) | |
2663 | 2691 | then throw("healES_checkTournament") | |
2664 | - | else if ( | |
2692 | + | else if (ky(B)) | |
2665 | 2693 | then throw("healES_checkDelivery") | |
2666 | 2694 | else { | |
2667 | - | let | |
2668 | - | let | |
2669 | - | let | |
2670 | - | if (( | |
2695 | + | let ji = A(B) | |
2696 | + | let jj = aj(valueOrElse(getInteger(E(B)), 0)) | |
2697 | + | let lY = valueOrElse(getInteger(ji), jj) | |
2698 | + | if ((lY > 0)) | |
2671 | 2699 | then throw("HP should be 0 to call Emergency Service") | |
2672 | 2700 | else { | |
2673 | - | let | |
2674 | - | let | |
2675 | - | let | |
2701 | + | let hS = bO(B) | |
2702 | + | let iv = hR(hS) | |
2703 | + | let lZ = if ((iv[bq] == "")) | |
2676 | 2704 | then nil | |
2677 | - | else split_4C( | |
2678 | - | let | |
2679 | - | then parseIntValue( | |
2705 | + | else split_4C(iv[bq], "_") | |
2706 | + | let md = if ((size(lZ) > 0)) | |
2707 | + | then parseIntValue(lZ[0]) | |
2680 | 2708 | else 0 | |
2681 | - | let | |
2682 | - | then parseIntValue( | |
2709 | + | let me = if ((size(lZ) > 1)) | |
2710 | + | then parseIntValue(lZ[1]) | |
2683 | 2711 | else 0 | |
2684 | - | let | |
2685 | - | then parseIntValue( | |
2712 | + | let mf = if ((size(lZ) > 2)) | |
2713 | + | then parseIntValue(lZ[2]) | |
2686 | 2714 | else 0 | |
2687 | - | if (if (if (( | |
2715 | + | if (if (if ((md > 0)) | |
2688 | 2716 | then true | |
2689 | - | else ( | |
2717 | + | else (me > 0)) | |
2690 | 2718 | then true | |
2691 | - | else ( | |
2719 | + | else (mf > 0)) | |
2692 | 2720 | then throw("You have to use own Medical Kit") | |
2693 | 2721 | else { | |
2694 | - | let | |
2695 | - | let | |
2696 | - | then split_4C(value( | |
2722 | + | let mg = getString(dk, bS()) | |
2723 | + | let mh = if (isDefined(mg)) | |
2724 | + | then split_4C(value(mg), "_") | |
2697 | 2725 | else nil | |
2698 | - | let | |
2699 | - | then parseIntValue( | |
2726 | + | let mi = if ((size(mh) > 0)) | |
2727 | + | then parseIntValue(mh[0]) | |
2700 | 2728 | else 0 | |
2701 | - | if ((0 >= | |
2729 | + | if ((0 >= mi)) | |
2702 | 2730 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2703 | 2731 | else { | |
2704 | - | let | |
2705 | - | let | |
2706 | - | let | |
2707 | - | let | |
2708 | - | let | |
2709 | - | if (( | |
2710 | - | then throw(("Payment attached should be " + toString( | |
2732 | + | let mc = (lY + parseIntValue(split(aY[0], "_")[ba])) | |
2733 | + | let mj = makeString([toString((mi - 1)), removeByIndex(mh, 0)], "_") | |
2734 | + | let cu = split(aY[0], "_") | |
2735 | + | let mk = ct(cu) | |
2736 | + | let ml = fraction((mk * aP), aO, (cM * bd)) | |
2737 | + | if ((lu.amount != ml)) | |
2738 | + | then throw(("Payment attached should be " + toString(ml))) | |
2711 | 2739 | else { | |
2712 | - | let | |
2713 | - | $Tuple2((( | |
2740 | + | let fq = dE(invoke(dk, "updateEsStorage", [mj], [AttachedPayment(cE, ml)])) | |
2741 | + | $Tuple2(((lt :+ IntegerEntry(ji, mc)) ++ km(B, aa)._1), fq) | |
2714 | 2742 | } | |
2715 | 2743 | } | |
2716 | 2744 | } | |
2717 | 2745 | } | |
2718 | 2746 | } | |
2719 | 2747 | } | |
2720 | 2748 | } | |
2721 | 2749 | } | |
2722 | 2750 | ||
2723 | 2751 | ||
2724 | 2752 | ||
2725 | - | @Callable( | |
2726 | - | func updateBackpack (B, | |
2753 | + | @Callable(gR) | |
2754 | + | func updateBackpack (B,mm) = if ((gR.caller != dk)) | |
2727 | 2755 | then throw("permission denied") | |
2728 | - | else $Tuple2([StringEntry( | |
2729 | - | ||
2730 | - | ||
2731 | - | ||
2732 | - | @Callable( | |
2756 | + | else $Tuple2([StringEntry(bO(B), mm)], mm) | |
2757 | + | ||
2758 | + | ||
2759 | + | ||
2760 | + | @Callable(gR) | |
2733 | 2761 | func commitForRandom () = { | |
2734 | - | let | |
2735 | - | let | |
2736 | - | let c = toString( | |
2737 | - | $Tuple2(([IntegerEntry( | |
2738 | - | } | |
2739 | - | ||
2740 | - | ||
2741 | - | ||
2742 | - | @Callable( | |
2762 | + | let lt = lp(gR) | |
2763 | + | let mn = (height + dx) | |
2764 | + | let c = toString(gR.caller) | |
2765 | + | $Tuple2(([IntegerEntry(dy(c), mn)] ++ lt), mn) | |
2766 | + | } | |
2767 | + | ||
2768 | + | ||
2769 | + | ||
2770 | + | @Callable(gR) | |
2743 | 2771 | func buySLand () = { | |
2744 | - | let | |
2745 | - | if ((size( | |
2772 | + | let lt = lp(gR) | |
2773 | + | if ((size(gR.payments) != 1)) | |
2746 | 2774 | then throw("Exactly one payment required") | |
2747 | 2775 | else { | |
2748 | - | let | |
2749 | - | if (( | |
2776 | + | let lu = value(gR.payments[0]) | |
2777 | + | if ((lu.assetId != cE)) | |
2750 | 2778 | then throw("Allowed USDT payment only!") | |
2751 | - | else if (( | |
2752 | - | then throw(("Payment attached should be " + toString( | |
2779 | + | else if ((lu.amount != el)) | |
2780 | + | then throw(("Payment attached should be " + toString(el))) | |
2753 | 2781 | else { | |
2754 | - | let | |
2755 | - | let | |
2756 | - | $Tuple2(((( | |
2782 | + | let fq = iP(gR.caller, gR.transactionId) | |
2783 | + | let mo = dH(invoke(do, "burnAcres", [en], nil)) | |
2784 | + | $Tuple2((((fq._1 :+ ScriptTransfer(dk, lu.amount, cE)) ++ kn(toString(gR.caller), ac)._1) ++ lt), $Tuple2(fq._2._1, mo)) | |
2757 | 2785 | } | |
2758 | 2786 | } | |
2759 | 2787 | } | |
2760 | 2788 | ||
2761 | 2789 | ||
2762 | 2790 | ||
2763 | - | @Callable( | |
2764 | - | func expedition ( | |
2765 | - | let | |
2766 | - | if ((size( | |
2791 | + | @Callable(gR) | |
2792 | + | func expedition (iX,iY) = { | |
2793 | + | let lt = lp(gR) | |
2794 | + | if ((size(gR.payments) != 0)) | |
2767 | 2795 | then throw("No payments required") | |
2768 | 2796 | else { | |
2769 | - | let | |
2770 | - | let | |
2771 | - | let B = | |
2772 | - | let | |
2773 | - | let | |
2774 | - | let | |
2775 | - | let | |
2776 | - | let | |
2777 | - | let | |
2778 | - | let | |
2779 | - | let | |
2780 | - | let | |
2781 | - | let | |
2782 | - | let | |
2783 | - | let | |
2784 | - | let | |
2785 | - | then $Tuple3([IntegerEntry( | |
2786 | - | else $Tuple3(( | |
2797 | + | let bR = toString(gR.caller) | |
2798 | + | let hw = iW(bR, iX, iY) | |
2799 | + | let B = hw._2 | |
2800 | + | let ji = A(B) | |
2801 | + | let hS = bO(B) | |
2802 | + | let iv = hR(hS) | |
2803 | + | let jX = split(iv[bp], "_") | |
2804 | + | let jZ = makeString(fk(true, jX, ek), "_") | |
2805 | + | let gE = G(B) | |
2806 | + | let lJ = valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2807 | + | let mp = fr(lJ, hw._5) | |
2808 | + | let lL = mp._1 | |
2809 | + | let lM = mp._2 | |
2810 | + | let mq = iP(gR.caller, gR.transactionId) | |
2811 | + | let iV = mq._2._1 | |
2812 | + | let fq = if ((0 >= hw._1)) | |
2813 | + | then $Tuple3([IntegerEntry(ji, 0), StringEntry(gE, lL)], "", 0) | |
2814 | + | else $Tuple3((mq._1 ++ (if (lM) | |
2787 | 2815 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2788 | - | else ((((nil :+ StringEntry( | |
2789 | - | if ( | |
2816 | + | else ((((nil :+ StringEntry(bP(B), makeString([mq._2._2, "L", iV], "_"))) :+ IntegerEntry(ji, hw._1)) :+ StringEntry(gE, lL)) :+ StringEntry(hS, makeString([iv[bn], iv[bo], jZ, iv[bq]], ":"))))), iV, hw._3) | |
2817 | + | if (kx(B)) | |
2790 | 2818 | then throw("expedition_checkTournament") | |
2791 | - | else if ( | |
2819 | + | else if (ky(B)) | |
2792 | 2820 | then throw("expedition_checkDelivery") | |
2793 | 2821 | else { | |
2794 | - | let | |
2795 | - | $Tuple2((( | |
2822 | + | let mo = dH(invoke(do, "burnAcres", [en], nil)) | |
2823 | + | $Tuple2(((fq._1 ++ km(B, ac)._1) ++ lt), $Tuple3(fq._2, fq._3, mo)) | |
2796 | 2824 | } | |
2797 | 2825 | } | |
2798 | 2826 | } | |
2799 | 2827 | ||
2800 | 2828 | ||
2801 | 2829 | ||
2802 | - | @Callable( | |
2830 | + | @Callable(gR) | |
2803 | 2831 | func buySLandForAcres () = { | |
2804 | - | let | |
2805 | - | if ((size( | |
2832 | + | let lt = lp(gR) | |
2833 | + | if ((size(gR.payments) != 1)) | |
2806 | 2834 | then throw("exactly 1 payment must be attached") | |
2807 | 2835 | else { | |
2808 | - | let | |
2809 | - | let | |
2810 | - | if (if (!(isDefined( | |
2836 | + | let lu = gR.payments[0] | |
2837 | + | let fx = lu.amount | |
2838 | + | if (if (!(isDefined(lu.assetId))) | |
2811 | 2839 | then true | |
2812 | - | else (value( | |
2840 | + | else (value(lu.assetId) != dw)) | |
2813 | 2841 | then throw("ACRES payments only!") | |
2814 | - | else if (( | |
2815 | - | then throw(("Payment attached should be " + toString( | |
2842 | + | else if ((fx != en)) | |
2843 | + | then throw(("Payment attached should be " + toString(en))) | |
2816 | 2844 | else { | |
2817 | - | let | |
2818 | - | let | |
2819 | - | $Tuple2((( | |
2845 | + | let fq = iP(gR.caller, gR.transactionId) | |
2846 | + | let mo = dH(invoke(do, "burnAcres", [en], [AttachedPayment(dw, fx)])) | |
2847 | + | $Tuple2(((fq._1 ++ kn(toString(gR.caller), ac)._1) ++ lt), $Tuple2(fq._2._1, mo)) | |
2820 | 2848 | } | |
2821 | 2849 | } | |
2822 | 2850 | } | |
2823 | 2851 | ||
2824 | 2852 | ||
2825 | 2853 | ||
2826 | - | @Callable( | |
2854 | + | @Callable(gR) | |
2827 | 2855 | func upgradeInfra (Q) = { | |
2828 | - | let | |
2829 | - | if ((size( | |
2856 | + | let lt = lp(gR) | |
2857 | + | if ((size(gR.payments) != 0)) | |
2830 | 2858 | then throw("No payments required") | |
2831 | 2859 | else { | |
2832 | - | let | |
2833 | - | let B = valueOrErrorMessage(getString( | |
2834 | - | $Tuple2((( | |
2835 | - | } | |
2836 | - | } | |
2837 | - | ||
2838 | - | ||
2839 | - | ||
2840 | - | @Callable( | |
2841 | - | func activateArtifact ( | |
2842 | - | let | |
2843 | - | if ((size( | |
2860 | + | let fq = jR(true, gR.caller, 0, Q) | |
2861 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked") | |
2862 | + | $Tuple2(((fq._1 ++ lt) ++ km(B, fraction(ad, fq._3, cM))._1), fq._2) | |
2863 | + | } | |
2864 | + | } | |
2865 | + | ||
2866 | + | ||
2867 | + | ||
2868 | + | @Callable(gR) | |
2869 | + | func activateArtifact (mr,ms) = { | |
2870 | + | let lt = lp(gR) | |
2871 | + | if ((size(gR.payments) != 0)) | |
2844 | 2872 | then throw("No payments required") | |
2845 | 2873 | else { | |
2846 | - | let c = toString( | |
2847 | - | let | |
2848 | - | let | |
2849 | - | if (("PRESALE" == | |
2850 | - | then | |
2851 | - | else if (("ONBOARD" == | |
2852 | - | then | |
2874 | + | let c = toString(gR.caller) | |
2875 | + | let fq = { | |
2876 | + | let cF = mr | |
2877 | + | if (("PRESALE" == cF)) | |
2878 | + | then kv(c, ms) | |
2879 | + | else if (("ONBOARD" == cF)) | |
2880 | + | then ko(c) | |
2853 | 2881 | else throw("Unknown artifact") | |
2854 | 2882 | } | |
2855 | - | ( | |
2856 | - | } | |
2857 | - | } | |
2858 | - | ||
2859 | - | ||
2860 | - | ||
2861 | - | @Callable( | |
2862 | - | func mergeLands ( | |
2863 | - | let | |
2864 | - | if ((size( | |
2883 | + | (fq ++ lt) | |
2884 | + | } | |
2885 | + | } | |
2886 | + | ||
2887 | + | ||
2888 | + | ||
2889 | + | @Callable(gR) | |
2890 | + | func mergeLands (kM) = { | |
2891 | + | let lt = lp(gR) | |
2892 | + | if ((size(gR.payments) != 0)) | |
2865 | 2893 | then throw("No payments required") | |
2866 | 2894 | else { | |
2867 | - | let | |
2868 | - | $Tuple2((( | |
2869 | - | } | |
2870 | - | } | |
2871 | - | ||
2872 | - | ||
2873 | - | ||
2874 | - | @Callable( | |
2875 | - | func cargoExchange ( | |
2876 | - | let | |
2877 | - | if ((size( | |
2895 | + | let fq = lk(toString(gR.caller), kM) | |
2896 | + | $Tuple2(((fq._1 ++ lt) ++ kn(toString(gR.caller), ae)._1), fq._2) | |
2897 | + | } | |
2898 | + | } | |
2899 | + | ||
2900 | + | ||
2901 | + | ||
2902 | + | @Callable(gR) | |
2903 | + | func cargoExchange (mt,Q) = { | |
2904 | + | let lt = lp(gR) | |
2905 | + | if ((size(gR.payments) != 0)) | |
2878 | 2906 | then throw("No payments required") | |
2879 | 2907 | else { | |
2880 | - | let | |
2881 | - | let c = toString( | |
2882 | - | let | |
2883 | - | let | |
2884 | - | if (!(isDefined(getInteger( | |
2885 | - | then throw(( | |
2908 | + | let iu = split_4C(mt, ":") | |
2909 | + | let c = toString(gR.originCaller) | |
2910 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
2911 | + | let jA = bx(Q) | |
2912 | + | if (!(isDefined(getInteger(jA)))) | |
2913 | + | then throw((jz.name + " is not staked")) | |
2886 | 2914 | else { | |
2887 | - | let | |
2888 | - | if (( | |
2915 | + | let jC = valueOrErrorMessage(getString(bu(Q)), (("NFT " + jz.name) + " is orphaned")) | |
2916 | + | if ((jC != c)) | |
2889 | 2917 | then throw((aF + " is not yours")) | |
2890 | 2918 | else { | |
2891 | - | let | |
2892 | - | let | |
2893 | - | let B = valueOrErrorMessage(getString( | |
2894 | - | let | |
2895 | - | let | |
2896 | - | if (( | |
2897 | - | then throw((("Duck location type is " + | |
2898 | - | else if (( | |
2919 | + | let ig = (dM(split(jz.description, "_")[dq]) / cN) | |
2920 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
2921 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
2922 | + | let jx = valueOrElse(getString(bP(B)), aN) | |
2923 | + | let cl = split(value(jx), "_") | |
2924 | + | if ((cl[bs] != "L")) | |
2925 | + | then throw((("Duck location type is " + cl[bs]) + ", but should be L")) | |
2926 | + | else if ((cl[bt] != Q)) | |
2899 | 2927 | then throw(("Duck should be on the land " + Q)) | |
2900 | 2928 | else { | |
2901 | - | let | |
2902 | - | let | |
2903 | - | let | |
2904 | - | let | |
2905 | - | let | |
2906 | - | let | |
2907 | - | let | |
2908 | - | let | |
2909 | - | ([StringEntry( | |
2929 | + | let if = bD(Q) | |
2930 | + | let hW = ie(if, ig, ih) | |
2931 | + | let hS = bO(B) | |
2932 | + | let iv = hR(hS) | |
2933 | + | let fq = it(iu, hW, iv) | |
2934 | + | let in = split(hW[bi], "_") | |
2935 | + | let jO = (parseIntValue(in[bk]) + fq._7) | |
2936 | + | let jP = (parseIntValue(in[bl]) - fq._7) | |
2937 | + | ([StringEntry(hS, makeString_2C([iv[bn], fq._4, fq._5, fq._6], ":")), StringEntry(if, makeString_2C([hW[be], fq._1, fq._2, fq._3, makeString([in[bj], toString(jO), toString(jP), in[bm]], "_")], ":"))] ++ lt) | |
2910 | 2938 | } | |
2911 | 2939 | } | |
2912 | 2940 | } | |
2913 | 2941 | } | |
2914 | 2942 | } | |
2915 | 2943 | ||
2916 | 2944 | ||
2917 | 2945 | ||
2918 | - | @Callable( | |
2919 | - | func saveWarehouse ( | |
2946 | + | @Callable(gR) | |
2947 | + | func saveWarehouse (ij,Q) = if ((gR.caller != dk)) | |
2920 | 2948 | then throw("Access denied") | |
2921 | 2949 | else { | |
2922 | - | let | |
2923 | - | let | |
2924 | - | if ((size( | |
2950 | + | let if = bD(Q) | |
2951 | + | let ik = split_4C(ij, ":") | |
2952 | + | if ((size(ik) != 5)) | |
2925 | 2953 | then throw("warehouse string should contain 4 ':' separators") | |
2926 | 2954 | else { | |
2927 | - | let | |
2928 | - | let | |
2929 | - | let | |
2930 | - | let | |
2931 | - | if ((0 > | |
2955 | + | let mu = split(ik[bi], "_")[bj] | |
2956 | + | let jO = hV(ik) | |
2957 | + | let mv = hT(ik[be]) | |
2958 | + | let jP = ((mv - parseIntValue(mu)) - jO) | |
2959 | + | if ((0 > jP)) | |
2932 | 2960 | then throw("Operation leads to negative free warehouse space") | |
2933 | 2961 | else { | |
2934 | - | let | |
2935 | - | $Tuple2([StringEntry( | |
2962 | + | let mw = makeString_2C([ik[be], ik[bf], ik[bg], ik[bh], makeString([mu, toString(jO), toString(jP), toString(mv)], "_")], ":") | |
2963 | + | $Tuple2([StringEntry(if, mw)], mw) | |
2936 | 2964 | } | |
2937 | 2965 | } | |
2938 | 2966 | } | |
2939 | 2967 | ||
2940 | 2968 | ||
2941 | 2969 | ||
2942 | - | @Callable( | |
2943 | - | func setCustomName ( | |
2944 | - | let | |
2945 | - | if ((size( | |
2970 | + | @Callable(gR) | |
2971 | + | func setCustomName (bv,kW,bz) = { | |
2972 | + | let lt = lp(gR) | |
2973 | + | if ((size(gR.payments) != 1)) | |
2946 | 2974 | then throw("Exactly one payment required") | |
2947 | 2975 | else { | |
2948 | - | let | |
2949 | - | if (( | |
2976 | + | let lu = value(gR.payments[0]) | |
2977 | + | if ((lu.assetId != cE)) | |
2950 | 2978 | then throw("Allowed USDT payment only!") | |
2951 | - | else if (( | |
2952 | - | then throw(("Payment should be " + toString( | |
2953 | - | else if (contains( | |
2954 | - | then throw(("Name should not contain '__': " + | |
2955 | - | else if ((size( | |
2956 | - | then throw(("Name too long, maxLength=" + toString( | |
2979 | + | else if ((lu.amount != eh)) | |
2980 | + | then throw(("Payment should be " + toString(eh))) | |
2981 | + | else if (contains(kW, "__")) | |
2982 | + | then throw(("Name should not contain '__': " + kW)) | |
2983 | + | else if ((size(kW) > ei)) | |
2984 | + | then throw(("Name too long, maxLength=" + toString(ei))) | |
2957 | 2985 | else { | |
2958 | - | let c = toString( | |
2959 | - | let | |
2960 | - | let | |
2961 | - | if (("ACCOUNT" == | |
2986 | + | let c = toString(gR.originCaller) | |
2987 | + | let mx = { | |
2988 | + | let cF = bz | |
2989 | + | if (("ACCOUNT" == cF)) | |
2962 | 2990 | then { | |
2963 | - | let | |
2964 | - | let | |
2965 | - | if (isDefined( | |
2966 | - | then throw(("Name already registered: " + | |
2991 | + | let my = eD(kW) | |
2992 | + | let mz = getString(my) | |
2993 | + | if (isDefined(mz)) | |
2994 | + | then throw(("Name already registered: " + kW)) | |
2967 | 2995 | else { | |
2968 | - | let | |
2969 | - | let | |
2970 | - | let | |
2971 | - | then [DeleteEntry( | |
2996 | + | let mA = bH(c) | |
2997 | + | let mB = getString(mA) | |
2998 | + | let mC = if (isDefined(mB)) | |
2999 | + | then [DeleteEntry(eD(value(mB)))] | |
2972 | 3000 | else nil | |
2973 | - | ((( | |
3001 | + | (((mC :+ StringEntry(mA, kW)) :+ StringEntry(my, c)) ++ kn(c, ab)._1) | |
2974 | 3002 | } | |
2975 | 3003 | } | |
2976 | - | else if (("LAND" == | |
3004 | + | else if (("LAND" == cF)) | |
2977 | 3005 | then { | |
2978 | - | let | |
2979 | - | let | |
2980 | - | if (!(isDefined(getInteger( | |
2981 | - | then throw(( | |
3006 | + | let jz = value(assetInfo(fromBase58String(bv))) | |
3007 | + | let jA = bx(bv) | |
3008 | + | if (!(isDefined(getInteger(jA)))) | |
3009 | + | then throw((jz.name + " is not staked")) | |
2982 | 3010 | else { | |
2983 | - | let | |
2984 | - | if (( | |
3011 | + | let jC = valueOrErrorMessage(getString(bu(bv)), (("NFT " + jz.name) + " is orphaned")) | |
3012 | + | if ((jC != c)) | |
2985 | 3013 | then throw((aF + " is not yours")) | |
2986 | 3014 | else { | |
2987 | - | let | |
2988 | - | let | |
2989 | - | if (isDefined( | |
2990 | - | then throw(("Name already registered: " + | |
3015 | + | let my = ew(kW) | |
3016 | + | let mz = getString(my) | |
3017 | + | if (isDefined(mz)) | |
3018 | + | then throw(("Name already registered: " + kW)) | |
2991 | 3019 | else { | |
2992 | - | let | |
2993 | - | let | |
2994 | - | let | |
2995 | - | then [DeleteEntry( | |
3020 | + | let mD = bw(bv) | |
3021 | + | let mB = getString(mD) | |
3022 | + | let mC = if (isDefined(mB)) | |
3023 | + | then [DeleteEntry(ew(value(mB)))] | |
2996 | 3024 | else nil | |
2997 | - | ((( | |
3025 | + | (((mC :+ StringEntry(mD, kW)) :+ StringEntry(my, bv)) ++ kn(c, ab)._1) | |
2998 | 3026 | } | |
2999 | 3027 | } | |
3000 | 3028 | } | |
3001 | 3029 | } | |
3002 | - | else if (("DUCK" == | |
3030 | + | else if (("DUCK" == cF)) | |
3003 | 3031 | then { | |
3004 | - | let | |
3005 | - | let | |
3006 | - | if (if (!(isDefined(getInteger( | |
3032 | + | let jz = value(assetInfo(fromBase58String(bv))) | |
3033 | + | let jA = bx(bv) | |
3034 | + | if (if (!(isDefined(getInteger(jA)))) | |
3007 | 3035 | then true | |
3008 | - | else !(isDefined(getString( | |
3009 | - | then throw(( | |
3036 | + | else !(isDefined(getString(bN(c))))) | |
3037 | + | then throw((jz.name + " is not staked")) | |
3010 | 3038 | else { | |
3011 | - | let | |
3012 | - | if (( | |
3039 | + | let jC = valueOrErrorMessage(getString(bM(bv)), (("NFT " + jz.name) + " is orphaned")) | |
3040 | + | if ((jC != c)) | |
3013 | 3041 | then throw((aG + " is not yours")) | |
3014 | 3042 | else { | |
3015 | - | let | |
3016 | - | let | |
3017 | - | if (isDefined( | |
3018 | - | then throw(("Name already registered: " + | |
3043 | + | let my = eC(kW) | |
3044 | + | let mz = getString(my) | |
3045 | + | if (isDefined(mz)) | |
3046 | + | then throw(("Name already registered: " + kW)) | |
3019 | 3047 | else { | |
3020 | - | let | |
3021 | - | let | |
3022 | - | let | |
3023 | - | then [DeleteEntry( | |
3048 | + | let mD = bG(bv) | |
3049 | + | let mB = getString(mD) | |
3050 | + | let mC = if (isDefined(mB)) | |
3051 | + | then [DeleteEntry(eC(value(mB)))] | |
3024 | 3052 | else nil | |
3025 | - | ((( | |
3053 | + | (((mC :+ StringEntry(mD, kW)) :+ StringEntry(my, bv)) ++ km(bv, ab)._1) | |
3026 | 3054 | } | |
3027 | 3055 | } | |
3028 | 3056 | } | |
3029 | 3057 | } | |
3030 | 3058 | else throw("Unknown entity type") | |
3031 | 3059 | } | |
3032 | - | $Tuple2((( | |
3060 | + | $Tuple2(((mx :+ ScriptTransfer(dk, lu.amount, cE)) ++ lt), 0) | |
3033 | 3061 | } | |
3034 | 3062 | } | |
3035 | 3063 | } | |
3036 | 3064 | ||
3037 | 3065 | ||
3038 | 3066 | ||
3039 | - | @Callable( | |
3040 | - | func setReferrals ( | |
3067 | + | @Callable(gR) | |
3068 | + | func setReferrals (mE,mF) = if ((gR.callerPublicKey != ee)) | |
3041 | 3069 | then throw("Permission denied") | |
3042 | 3070 | else { | |
3043 | - | let | |
3044 | - | if ((size( | |
3071 | + | let lt = lp(gR) | |
3072 | + | if ((size(gR.payments) != 0)) | |
3045 | 3073 | then throw("No payments required") | |
3046 | - | else if (!(isDefined(addressFromString( | |
3047 | - | then throw(("Invalid address: " + | |
3048 | - | else if (!(isDefined(addressFromString( | |
3049 | - | then throw(("Invalid address: " + | |
3074 | + | else if (!(isDefined(addressFromString(mE)))) | |
3075 | + | then throw(("Invalid address: " + mE)) | |
3076 | + | else if (!(isDefined(addressFromString(mF)))) | |
3077 | + | then throw(("Invalid address: " + mF)) | |
3050 | 3078 | else { | |
3051 | - | let | |
3052 | - | let | |
3053 | - | let | |
3054 | - | then split_4C(value( | |
3079 | + | let mG = eE() | |
3080 | + | let mH = getString(mG) | |
3081 | + | let mI = if (isDefined(mH)) | |
3082 | + | then split_4C(value(mH), "_") | |
3055 | 3083 | else nil | |
3056 | - | if (containsElement( | |
3057 | - | then throw(( | |
3084 | + | if (containsElement(mI, mF)) | |
3085 | + | then throw((mF + " is not newbie (already has referrals)")) | |
3058 | 3086 | else { | |
3059 | - | let | |
3060 | - | let | |
3061 | - | if (if (isDefined( | |
3062 | - | then isDefined(addressFromString(value( | |
3087 | + | let kp = bI(mF) | |
3088 | + | let kq = getString(kp) | |
3089 | + | if (if (isDefined(kq)) | |
3090 | + | then isDefined(addressFromString(value(kq))) | |
3063 | 3091 | else false) | |
3064 | - | then throw((( | |
3092 | + | then throw(((mF + " already has refBy: ") + value(kq))) | |
3065 | 3093 | else { | |
3066 | - | let | |
3067 | - | let | |
3068 | - | let | |
3069 | - | then split_4C(value( | |
3094 | + | let mJ = bL(mE) | |
3095 | + | let mK = getString(mJ) | |
3096 | + | let mL = if (isDefined(mK)) | |
3097 | + | then split_4C(value(mK), "_") | |
3070 | 3098 | else nil | |
3071 | - | if (containsElement( | |
3072 | - | then throw(((( | |
3099 | + | if (containsElement(mL, mF)) | |
3100 | + | then throw((((mE + " already contains ") + mF) + " within referrals")) | |
3073 | 3101 | else { | |
3074 | - | let | |
3075 | - | let | |
3076 | - | then value( | |
3077 | - | else makeString_2C(( | |
3078 | - | $Tuple2(([StringEntry( | |
3102 | + | let mM = makeString_2C((mL :+ mF), "_") | |
3103 | + | let mN = if (containsElement(mI, mE)) | |
3104 | + | then value(mH) | |
3105 | + | else makeString_2C((mI :+ mE), "_") | |
3106 | + | $Tuple2(([StringEntry(kp, mE), StringEntry(mJ, mM), StringEntry(mG, mN)] ++ lt), 0) | |
3079 | 3107 | } | |
3080 | 3108 | } | |
3081 | 3109 | } | |
3082 | 3110 | } | |
3083 | 3111 | } | |
3084 | 3112 | ||
3085 | 3113 | ||
3086 | 3114 | ||
3087 | - | @Callable( | |
3088 | - | func distributePoints ( | |
3089 | - | let | |
3090 | - | if ((size( | |
3115 | + | @Callable(gR) | |
3116 | + | func distributePoints (mO,mP,mQ,mR,mS) = { | |
3117 | + | let lt = lp(gR) | |
3118 | + | if ((size(gR.payments) != 0)) | |
3091 | 3119 | then throw("No payments required") | |
3092 | 3120 | else { | |
3093 | - | let c = toString( | |
3094 | - | let | |
3095 | - | let | |
3096 | - | let | |
3121 | + | let c = toString(gR.originCaller) | |
3122 | + | let mT = dJ(invoke(dm, "checkWlgXpREADONLY", [c], nil)) | |
3123 | + | let mU = dH(mT[1]) | |
3124 | + | let mV = if ((0 >= mU)) | |
3097 | 3125 | then $Tuple2(0, nil) | |
3098 | 3126 | else { | |
3099 | - | let | |
3100 | - | if (( | |
3101 | - | then $Tuple2( | |
3127 | + | let kk = dH(invoke(dm, "takeWlgXp", [c], nil)) | |
3128 | + | if ((kk == kk)) | |
3129 | + | then $Tuple2(mU, [IntegerEntry(I(c), dH(mT[0])), IntegerEntry(H(c), dH(mT[2]))]) | |
3102 | 3130 | else throw("Strict value is not equal to itself.") | |
3103 | 3131 | } | |
3104 | - | let | |
3105 | - | let | |
3106 | - | let B = valueOrErrorMessage(getString( | |
3107 | - | let | |
3108 | - | let | |
3109 | - | let | |
3110 | - | let | |
3111 | - | let | |
3112 | - | let | |
3113 | - | if (( | |
3114 | - | then throw((("There are only " + toString( | |
3132 | + | let mW = mV._1 | |
3133 | + | let mX = mV._2 | |
3134 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
3135 | + | let mY = J(c) | |
3136 | + | let mZ = (valueOrElse(getInteger(mY), 0) + mW) | |
3137 | + | let na = F(B) | |
3138 | + | let nb = valueOrElse(getInteger(na), 0) | |
3139 | + | let nc = (mZ + nb) | |
3140 | + | let nd = ((((mO + mP) + mQ) + mR) + mS) | |
3141 | + | if ((nd > nc)) | |
3142 | + | then throw((("There are only " + toString(nc)) + " free points to distribute")) | |
3115 | 3143 | else { | |
3116 | - | let | |
3117 | - | let at = split(valueOrElse(getString( | |
3118 | - | let | |
3119 | - | $Tuple2((([IntegerEntry( | |
3144 | + | let ne = C(B) | |
3145 | + | let at = split(valueOrElse(getString(ne), "0_0_0_0_0"), "_") | |
3146 | + | let nf = (mZ - nd) | |
3147 | + | $Tuple2((([IntegerEntry(mY, if ((0 > nf)) | |
3120 | 3148 | then 0 | |
3121 | - | else | |
3122 | - | then ( | |
3123 | - | else | |
3149 | + | else nf), IntegerEntry(na, if ((0 > nf)) | |
3150 | + | then (nb + nf) | |
3151 | + | else nb), StringEntry(ne, makeString([toString((parseIntValue(at[l]) + mO)), toString((parseIntValue(at[m]) + mP)), toString((parseIntValue(at[n]) + mQ)), toString((parseIntValue(at[o]) + mR)), toString((parseIntValue(at[p]) + mS))], "_"))] ++ lt) ++ mX), 0) | |
3124 | 3152 | } | |
3125 | 3153 | } | |
3126 | 3154 | } | |
3127 | 3155 | ||
3128 | 3156 | ||
3129 | 3157 | ||
3130 | - | @Callable( | |
3131 | - | func splitByGlobalWeightsREADONLY ( | |
3132 | - | ||
3133 | - | ||
3134 | - | ||
3135 | - | @Callable( | |
3136 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
3137 | - | let | |
3138 | - | $Tuple2(nil, $Tuple2( | |
3139 | - | } | |
3140 | - | ||
3141 | - | ||
3142 | - | ||
3143 | - | @Callable( | |
3144 | - | func getBackpackREADONLY (B) = $Tuple2(nil, makeString( | |
3145 | - | ||
3146 | - | ||
3147 | - | ||
3148 | - | @Callable( | |
3158 | + | @Callable(gR) | |
3159 | + | func splitByGlobalWeightsREADONLY (eP) = $Tuple2(nil, fh(eP)) | |
3160 | + | ||
3161 | + | ||
3162 | + | ||
3163 | + | @Callable(gR) | |
3164 | + | func splitByGlobalAndLocalWeightsREADONLY (ng,nh,gU) = { | |
3165 | + | let gN = gT(gU) | |
3166 | + | $Tuple2(nil, $Tuple2(fh(ng), eS(nh, gN))) | |
3167 | + | } | |
3168 | + | ||
3169 | + | ||
3170 | + | ||
3171 | + | @Callable(gR) | |
3172 | + | func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hR(bO(B)), ":")) | |
3173 | + | ||
3174 | + | ||
3175 | + | ||
3176 | + | @Callable(gR) | |
3149 | 3177 | func getWarehouseREADONLY (Q) = { | |
3150 | - | let | |
3151 | - | let | |
3152 | - | let | |
3153 | - | $Tuple2(nil, makeString_2C( | |
3154 | - | } | |
3155 | - | ||
3156 | - | ||
3157 | - | ||
3158 | - | @Callable( | |
3159 | - | func saveLastTx () = if (!(containsElement([dk, | |
3178 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
3179 | + | let ig = (dM(split(jz.description, "_")[dq]) / cN) | |
3180 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
3181 | + | $Tuple2(nil, makeString_2C(ie(bD(Q), ig, ih), ":")) | |
3182 | + | } | |
3183 | + | ||
3184 | + | ||
3185 | + | ||
3186 | + | @Callable(gR) | |
3187 | + | func saveLastTx () = if (!(containsElement([dm, dk, dn, do], gR.caller))) | |
3160 | 3188 | then throw("Access denied") | |
3161 | - | else $Tuple2( | |
3162 | - | ||
3163 | - | ||
3164 | - | ||
3165 | - | @Callable( | |
3166 | - | func updateDuckStats (B, | |
3189 | + | else $Tuple2(lp(gR), 42) | |
3190 | + | ||
3191 | + | ||
3192 | + | ||
3193 | + | @Callable(gR) | |
3194 | + | func updateDuckStats (B,kk) = if ((gR.caller != dk)) | |
3167 | 3195 | then throw("Access denied") | |
3168 | - | else | |
3169 | - | ||
3170 | - | ||
3171 | - | ||
3172 | - | @Callable( | |
3173 | - | func updateAccStats (c, | |
3196 | + | else km(B, kk) | |
3197 | + | ||
3198 | + | ||
3199 | + | ||
3200 | + | @Callable(gR) | |
3201 | + | func updateAccStats (c,kk) = if (!(containsElement([dm, dk, do], gR.caller))) | |
3174 | 3202 | then throw("Access denied") | |
3175 | - | else | |
3176 | - | ||
3177 | - | ||
3178 | - | ||
3179 | - | @Callable( | |
3180 | - | func equipDuck ( | |
3181 | - | let | |
3182 | - | if ((size( | |
3203 | + | else kn(c, kk) | |
3204 | + | ||
3205 | + | ||
3206 | + | ||
3207 | + | @Callable(gR) | |
3208 | + | func equipDuck (ni) = { | |
3209 | + | let lt = lp(gR) | |
3210 | + | if ((size(gR.payments) != 0)) | |
3183 | 3211 | then throw("No payments required") | |
3184 | 3212 | else { | |
3185 | - | let c = toString( | |
3186 | - | let B = valueOrErrorMessage(getString( | |
3187 | - | if ( | |
3213 | + | let c = toString(gR.originCaller) | |
3214 | + | let B = valueOrErrorMessage(getString(bN(c)), "You don't have a duck staked") | |
3215 | + | if (kx(B)) | |
3188 | 3216 | then throw("equipDuck_checkTournament") | |
3189 | - | else if ( | |
3217 | + | else if (ky(B)) | |
3190 | 3218 | then throw("equipDuck_checkDelivery") | |
3191 | 3219 | else { | |
3192 | - | let | |
3193 | - | let | |
3194 | - | let | |
3195 | - | let | |
3196 | - | let | |
3197 | - | if ((size( | |
3220 | + | let gE = G(B) | |
3221 | + | let nj = split(valueOrElse(getString(gE), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3222 | + | let hS = bO(B) | |
3223 | + | let iv = hR(hS) | |
3224 | + | let lL = split(ni, "_") | |
3225 | + | if ((size(lL) != r)) | |
3198 | 3226 | then throw("Wrong equipment string") | |
3199 | 3227 | else { | |
3200 | - | let | |
3201 | - | let | |
3202 | - | let ar = if (( | |
3228 | + | let gG = gt(nj, fE(iv[bq]), true, nil) | |
3229 | + | let gH = split(lL[q], ";")[1] | |
3230 | + | let ar = if ((gH == "")) | |
3203 | 3231 | then 0 | |
3204 | 3232 | else { | |
3205 | - | let | |
3206 | - | if (( | |
3233 | + | let gI = split(gH, ",")[0] | |
3234 | + | if ((gI == "")) | |
3207 | 3235 | then 0 | |
3208 | 3236 | else { | |
3209 | - | let | |
3210 | - | let | |
3211 | - | let | |
3212 | - | if (if (if (if (if (( | |
3237 | + | let fT = split(gI, ":") | |
3238 | + | let di = fT[0] | |
3239 | + | let gJ = fT[1] | |
3240 | + | if (if (if (if (if ((di == "06")) | |
3213 | 3241 | then true | |
3214 | - | else ( | |
3242 | + | else (di == "07")) | |
3215 | 3243 | then true | |
3216 | - | else ( | |
3217 | - | then ( | |
3244 | + | else (di == "08")) | |
3245 | + | then (gJ != "") | |
3218 | 3246 | else false) | |
3219 | - | then (parseIntValue( | |
3247 | + | then (parseIntValue(gJ) > 0) | |
3220 | 3248 | else false) | |
3221 | - | then parseIntValue(split( | |
3249 | + | then parseIntValue(split(aY[parseIntValue(di)], "_")[ba]) | |
3222 | 3250 | else 0 | |
3223 | 3251 | } | |
3224 | 3252 | } | |
3225 | - | let | |
3226 | - | let | |
3227 | - | let | |
3228 | - | $Tuple2(([StringEntry( | |
3253 | + | let go = ap(this, B, ar, true) | |
3254 | + | let gK = gt(lL, gG, false, go) | |
3255 | + | let nk = fJ(gK) | |
3256 | + | $Tuple2(([StringEntry(gE, ni), StringEntry(hS, makeString_2C([iv[bn], iv[bo], iv[bp], nk], ":")), StringEntry(M(B), makeString([toString(go[7]), toString(go[8]), toString(go[9]), toString(go[10]), toString(go[11])], "_"))] ++ lt), 0) | |
3229 | 3257 | } | |
3230 | 3258 | } | |
3231 | 3259 | } | |
3232 | 3260 | } | |
3233 | 3261 | ||
3234 | 3262 | ||
3235 | 3263 | ||
3236 | - | @Callable( | |
3237 | - | func fortificateLand (Q, | |
3238 | - | let | |
3239 | - | if ((size( | |
3264 | + | @Callable(gR) | |
3265 | + | func fortificateLand (Q,nl) = { | |
3266 | + | let lt = lp(gR) | |
3267 | + | if ((size(gR.payments) != 0)) | |
3240 | 3268 | then throw("No payments required") | |
3241 | 3269 | else { | |
3242 | - | let c = toString( | |
3243 | - | let B = valueOrElse(getString( | |
3244 | - | let | |
3245 | - | let | |
3246 | - | let | |
3247 | - | let | |
3248 | - | let | |
3249 | - | let | |
3250 | - | let | |
3251 | - | let | |
3252 | - | let | |
3253 | - | let | |
3254 | - | let | |
3255 | - | let | |
3256 | - | let | |
3257 | - | let | |
3258 | - | let | |
3259 | - | let | |
3260 | - | let | |
3261 | - | let | |
3262 | - | let | |
3263 | - | let | |
3264 | - | let | |
3265 | - | let | |
3266 | - | $Tuple2(([StringEntry( | |
3267 | - | } | |
3268 | - | } | |
3269 | - | ||
3270 | - | ||
3271 | - | ||
3272 | - | @Callable( | |
3273 | - | func initDuckTourAttempt (B) = if (( | |
3270 | + | let c = toString(gR.originCaller) | |
3271 | + | let B = valueOrElse(getString(bN(c)), "") | |
3272 | + | let fO = ap(this, B, 0, false) | |
3273 | + | let nm = bF(Q) | |
3274 | + | let nn = split(valueOrElse(getString(nm), ":0_15:0_18:0"), "_") | |
3275 | + | let jz = value(assetInfo(fromBase58String(Q))) | |
3276 | + | let ig = (dM(split(jz.description, "_")[dq]) / cN) | |
3277 | + | let ih = valueOrElse(getInteger(bE(Q)), 0) | |
3278 | + | let if = bD(Q) | |
3279 | + | let ik = ie(if, ig, ih) | |
3280 | + | let no = split(ik[bi], "_") | |
3281 | + | let np = parseIntValue(no[bk]) | |
3282 | + | let nq = parseIntValue(no[bl]) | |
3283 | + | let nr = split(nl, "_") | |
3284 | + | let ns = gA(nn, fE(ik[bh]), np, nq, true, nil) | |
3285 | + | let gG = ns._1 | |
3286 | + | let nt = ns._2 | |
3287 | + | let nu = ns._3 | |
3288 | + | let nv = gA(nr, gG, nt, nu, false, fO) | |
3289 | + | let gK = nv._1 | |
3290 | + | let nw = nv._2 | |
3291 | + | let nx = nv._3 | |
3292 | + | let nk = fJ(gK) | |
3293 | + | let kf = makeString([no[bj], toString(nw), toString(nx), no[bm]], "_") | |
3294 | + | $Tuple2(([StringEntry(nm, nl), StringEntry(if, makeString_2C([ik[be], ik[bf], ik[bg], nk, kf], ":"))] ++ lt), 0) | |
3295 | + | } | |
3296 | + | } | |
3297 | + | ||
3298 | + | ||
3299 | + | ||
3300 | + | @Callable(gR) | |
3301 | + | func initDuckTourAttempt (B) = if ((gR.caller != dn)) | |
3274 | 3302 | then throw("Access denied") | |
3275 | 3303 | else { | |
3276 | - | let | |
3277 | - | let | |
3278 | - | let | |
3279 | - | let | |
3280 | - | let | |
3281 | - | let | |
3282 | - | let | |
3283 | - | $Tuple2([IntegerEntry(K(B), | |
3304 | + | let ji = A(B) | |
3305 | + | let jj = aj(valueOrElse(getInteger(E(B)), 0)) | |
3306 | + | let kC = valueOrElse(getInteger(ji), jj) | |
3307 | + | let ny = bP(B) | |
3308 | + | let jx = valueOrElse(getString(ny), aN) | |
3309 | + | let ck = valueOrElse(getInteger(dn, bV), 0) | |
3310 | + | let nz = (toString(ck) + "_T_0") | |
3311 | + | $Tuple2([IntegerEntry(K(B), kC), IntegerEntry(ji, jj), StringEntry(L(B), jx), StringEntry(ny, nz)], nz) | |
3284 | 3312 | } | |
3285 | 3313 | ||
3286 | 3314 | ||
3287 | 3315 | ||
3288 | - | @Callable( | |
3316 | + | @Callable(gR) | |
3289 | 3317 | func breakAttempt () = { | |
3290 | - | let | |
3291 | - | let B = valueOrErrorMessage(getString( | |
3292 | - | let | |
3293 | - | let | |
3294 | - | if ((split( | |
3318 | + | let lt = lp(gR) | |
3319 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.caller))), "You don't have a duck staked") | |
3320 | + | let ny = bP(B) | |
3321 | + | let jx = valueOrElse(getString(ny), aN) | |
3322 | + | if ((split(jx, "_")[bs] != "T")) | |
3295 | 3323 | then throw("Your duck is not in the tournament") | |
3296 | 3324 | else { | |
3297 | - | let | |
3298 | - | let | |
3299 | - | $Tuple2((( | |
3300 | - | } | |
3301 | - | } | |
3302 | - | ||
3303 | - | ||
3304 | - | ||
3305 | - | @Callable( | |
3306 | - | func breakAttemptCallback () = if (( | |
3325 | + | let nA = getIntegerValue(K(B)) | |
3326 | + | let kI = getStringValue(L(B)) | |
3327 | + | $Tuple2(((lt :+ IntegerEntry(A(B), nA)) :+ StringEntry(ny, kI)), jx) | |
3328 | + | } | |
3329 | + | } | |
3330 | + | ||
3331 | + | ||
3332 | + | ||
3333 | + | @Callable(gR) | |
3334 | + | func breakAttemptCallback () = if ((gR.caller != dn)) | |
3307 | 3335 | then throw("Access denied") | |
3308 | 3336 | else { | |
3309 | - | let B = valueOrErrorMessage(getString( | |
3310 | - | $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry( | |
3337 | + | let B = valueOrErrorMessage(getString(bN(toString(gR.originCaller))), "You don't have a duck staked") | |
3338 | + | $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bP(B), getStringValue(L(B)))], "breakAttemptCallback") | |
3311 | 3339 | } | |
3312 | 3340 | ||
3313 | 3341 | ||
3314 | 3342 | ||
3315 | - | @Callable( | |
3316 | - | func exitTournamentInternal (B) = if (( | |
3343 | + | @Callable(gR) | |
3344 | + | func exitTournamentInternal (B) = if ((gR.caller != this)) | |
3317 | 3345 | then throw("Access denied") | |
3318 | 3346 | else { | |
3319 | - | let | |
3320 | - | let | |
3321 | - | $Tuple2([IntegerEntry(A(B), | |
3347 | + | let nA = getIntegerValue(K(B)) | |
3348 | + | let kI = getStringValue(L(B)) | |
3349 | + | $Tuple2([IntegerEntry(A(B), nA), StringEntry(bP(B), kI)], false) | |
3322 | 3350 | } | |
3323 | 3351 | ||
3324 | 3352 | ||
3325 | 3353 | ||
3326 | - | @Callable( | |
3327 | - | func exitDeliveryInternal (B) = if (( | |
3354 | + | @Callable(gR) | |
3355 | + | func exitDeliveryInternal (B) = if ((gR.caller != this)) | |
3328 | 3356 | then throw("Access denied") | |
3329 | 3357 | else { | |
3330 | - | let | |
3331 | - | $Tuple2(( | |
3358 | + | let mq = kz(B, false, 0, 0) | |
3359 | + | $Tuple2((mq._1 ++ mq._2), false) | |
3332 | 3360 | } | |
3333 | 3361 | ||
3334 | 3362 | ||
3335 | 3363 | ||
3336 | - | @Callable( | |
3337 | - | func autoExitDelivery (B, | |
3364 | + | @Callable(gR) | |
3365 | + | func autoExitDelivery (B,jc,nB,kA) = if ((gR.caller != this)) | |
3338 | 3366 | then throw("Access denied") | |
3339 | 3367 | else { | |
3340 | - | let | |
3341 | - | $Tuple2( | |
3368 | + | let mq = kz(B, true, jc, kA) | |
3369 | + | $Tuple2(mq._1, mq._3) | |
3342 | 3370 | } | |
3343 | 3371 | ||
3344 | 3372 | ||
3345 | 3373 | ||
3346 | - | @Callable( | |
3347 | - | func breakDelivery () = $Tuple2( | |
3348 | - | ||
3349 | - | ||
3350 | - | ||
3351 | - | @Callable( | |
3352 | - | func prepareRobbery ( | |
3353 | - | let | |
3354 | - | if (!(sigVerify_8Kb( | |
3374 | + | @Callable(gR) | |
3375 | + | func breakDelivery () = $Tuple2(lp(gR), "breakDelivery") | |
3376 | + | ||
3377 | + | ||
3378 | + | ||
3379 | + | @Callable(gR) | |
3380 | + | func prepareRobbery (iX,iY) = { | |
3381 | + | let lt = lp(gR) | |
3382 | + | if (!(sigVerify_8Kb(iX, iY, ee))) | |
3355 | 3383 | then throw("signature does not match") | |
3356 | - | else if ((size( | |
3384 | + | else if ((size(gR.payments) != 1)) | |
3357 | 3385 | then throw("exactly 1 payment must be attached") | |
3358 | 3386 | else { | |
3359 | - | let | |
3360 | - | let | |
3361 | - | if (if (!(isDefined( | |
3387 | + | let lu = gR.payments[0] | |
3388 | + | let nC = lu.amount | |
3389 | + | if (if (!(isDefined(lu.assetId))) | |
3362 | 3390 | then true | |
3363 | - | else (value( | |
3391 | + | else (value(lu.assetId) != du)) | |
3364 | 3392 | then throw("WLGOLD payments only!") | |
3365 | 3393 | else { | |
3366 | - | let | |
3367 | - | if ((2 > size( | |
3394 | + | let fw = split(toUtf8String(iX), "|") | |
3395 | + | if ((2 > size(fw))) | |
3368 | 3396 | then throw("Wrong message format") | |
3369 | 3397 | else { | |
3370 | - | let | |
3371 | - | then | |
3398 | + | let jg = if ((size(fw) >= 2)) | |
3399 | + | then fw[2] | |
3372 | 3400 | else "" | |
3373 | - | let | |
3374 | - | let | |
3375 | - | if (( | |
3376 | - | then throw(((("Tx ids don't match! In state: " + | |
3401 | + | let bR = toString(gR.caller) | |
3402 | + | let jh = valueOrElse(getString(dQ(bR)), "") | |
3403 | + | if ((jh != jg)) | |
3404 | + | then throw(((("Tx ids don't match! In state: " + jh) + ", in msg: ") + jg)) | |
3377 | 3405 | else { | |
3378 | - | let B = | |
3379 | - | if ( | |
3406 | + | let B = fw[0] | |
3407 | + | if (kx(B)) | |
3380 | 3408 | then throw("prepareRobbery_checkTournament") | |
3381 | - | else if ( | |
3409 | + | else if (ky(B)) | |
3382 | 3410 | then throw("prepareRobbery_checkDelivery") | |
3383 | 3411 | else { | |
3384 | 3412 | let aB = ax(this, B)._1 | |
3385 | - | if ((aB > | |
3386 | - | then throw(((("Payment " + toString( | |
3413 | + | if ((aB > nC)) | |
3414 | + | then throw(((("Payment " + toString(nC)) + " < required ") + toString(aB))) | |
3387 | 3415 | else { | |
3388 | - | let | |
3416 | + | let nD = split(fw[1], "_") | |
3389 | 3417 | let aA = lastBlock.timestamp | |
3390 | 3418 | let aC = valueOrElse(getInteger(S(B)), 0) | |
3391 | 3419 | let aD = valueOrElse(getString(T(B)), "") | |
3392 | 3420 | let aE = valueOrElse(getInteger(R(aD)), 0) | |
3393 | 3421 | if (if ((aC != y)) | |
3394 | 3422 | then (aE > aA) | |
3395 | 3423 | else false) | |
3396 | 3424 | then throw(("You already started robbing, wait till " + toString(aE))) | |
3397 | 3425 | else { | |
3398 | - | func | |
3399 | - | let | |
3400 | - | let | |
3401 | - | if (( | |
3426 | + | func nE (eY,Q) = { | |
3427 | + | let nF = valueOrElse(getInteger(P(Q)), 0) | |
3428 | + | let nG = valueOrElse(getInteger(R(Q)), 0) | |
3429 | + | if ((nF > size(v))) | |
3402 | 3430 | then throw("Invalid state") | |
3403 | - | else if ((aA > | |
3431 | + | else if ((aA > nG)) | |
3404 | 3432 | then { | |
3405 | - | let | |
3406 | - | if ((0 >= | |
3407 | - | then | |
3433 | + | let nH = valueOrElse(getInteger(bx(Q)), 0) | |
3434 | + | if ((0 >= nH)) | |
3435 | + | then eY | |
3408 | 3436 | else { | |
3409 | - | let | |
3410 | - | let | |
3411 | - | let | |
3412 | - | let | |
3413 | - | let | |
3414 | - | let | |
3415 | - | if ((w > | |
3416 | - | then | |
3417 | - | else ( | |
3437 | + | let gy = value(assetInfo(fromBase58String(Q))) | |
3438 | + | let jD = split(gy.description, "_") | |
3439 | + | let jp = dM(jD[dq]) | |
3440 | + | let nI = jo(Q, jp) | |
3441 | + | let gX = (aA - nH) | |
3442 | + | let jG = fraction(gX, (nI * jp), a) | |
3443 | + | if ((w > jG)) | |
3444 | + | then eY | |
3445 | + | else (eY :+ Q) | |
3418 | 3446 | } | |
3419 | 3447 | } | |
3420 | - | else | |
3448 | + | else eY | |
3421 | 3449 | } | |
3422 | 3450 | ||
3423 | - | let | |
3424 | - | let | |
3425 | - | let | |
3426 | - | let | |
3427 | - | func | |
3428 | - | then | |
3429 | - | else | |
3430 | - | ||
3431 | - | func | |
3432 | - | then | |
3451 | + | let nJ = { | |
3452 | + | let fa = nD | |
3453 | + | let fb = size(fa) | |
3454 | + | let fc = nil | |
3455 | + | func fd (fe,ff) = if ((ff >= fb)) | |
3456 | + | then fe | |
3457 | + | else nE(fe, fa[ff]) | |
3458 | + | ||
3459 | + | func fg (fe,ff) = if ((ff >= fb)) | |
3460 | + | then fe | |
3433 | 3461 | else throw("List size exceeds 10") | |
3434 | 3462 | ||
3435 | - | fc | |
3463 | + | fg(fd(fd(fd(fd(fd(fd(fd(fd(fd(fd(fc, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3436 | 3464 | } | |
3437 | - | if ((size( | |
3465 | + | if ((size(nJ) == 0)) | |
3438 | 3466 | then throw("No candidates for robbery") | |
3439 | 3467 | else { | |
3440 | - | let | |
3441 | - | let Q = | |
3442 | - | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ | |
3468 | + | let nK = dX(size(nJ), iX, iY) | |
3469 | + | let Q = nJ[nK] | |
3470 | + | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ lt), Q) | |
3443 | 3471 | } | |
3444 | 3472 | } | |
3445 | 3473 | } | |
3446 | 3474 | } | |
3447 | 3475 | } | |
3448 | 3476 | } | |
3449 | 3477 | } | |
3450 | 3478 | } | |
3451 | 3479 | } | |
3452 | 3480 | ||
3453 | 3481 | ||
3454 | 3482 | ||
3455 | - | @Callable( | |
3456 | - | func robLand ( | |
3457 | - | let | |
3458 | - | if (!(sigVerify_8Kb( | |
3483 | + | @Callable(gR) | |
3484 | + | func robLand (iX,iY) = { | |
3485 | + | let lt = lp(gR) | |
3486 | + | if (!(sigVerify_8Kb(iX, iY, ee))) | |
3459 | 3487 | then throw("signature does not match") | |
3460 | 3488 | else { | |
3461 | - | let | |
3462 | - | let B = valueOrErrorMessage(getString( | |
3489 | + | let bR = toString(gR.caller) | |
3490 | + | let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked") | |
3463 | 3491 | let aA = lastBlock.timestamp | |
3464 | - | $Tuple2(( | |
3465 | - | } | |
3466 | - | } | |
3467 | - | ||
3468 | - | ||
3469 | - | ||
3470 | - | @Callable( | |
3492 | + | $Tuple2((lt :+ IntegerEntry(N(B), aA)), 0) | |
3493 | + | } | |
3494 | + | } | |
3495 | + | ||
3496 | + | ||
3497 | + | ||
3498 | + | @Callable(gR) | |
3471 | 3499 | func acceptDelivery () = { | |
3472 | - | let | |
3473 | - | let | |
3474 | - | let B = valueOrErrorMessage(getString( | |
3475 | - | let | |
3476 | - | let | |
3477 | - | if (( | |
3478 | - | then throw(((("Delivery is not available, fund=" + | |
3500 | + | let lt = lp(gR) | |
3501 | + | let bR = toString(gR.caller) | |
3502 | + | let B = valueOrErrorMessage(getString(bN(bR)), "You don't have a duck staked") | |
3503 | + | let nL = valueOrElse(getInteger(dk, bT), 0) | |
3504 | + | let kG = valueOrElse(getInteger(dk, bU), 0) | |
3505 | + | if ((aQ > (nL - kG))) | |
3506 | + | then throw(((("Delivery is not available, fund=" + dR(nL, 6)) + ", locked=") + dR(kG, 6))) | |
3479 | 3507 | else { | |
3480 | 3508 | let aA = lastBlock.timestamp | |
3481 | - | let | |
3482 | - | if (( | |
3483 | - | then throw(("Delivery is forbidden for your duck until " + toString( | |
3509 | + | let nM = valueOrElse(getInteger(U(B)), 0) | |
3510 | + | if ((nM > aA)) | |
3511 | + | then throw(("Delivery is forbidden for your duck until " + toString(nM))) | |
3484 | 3512 | else { | |
3485 | 3513 | let av = getIntegerValue(A(B)) | |
3486 | 3514 | if ((0 >= av)) | |
3487 | 3515 | then throw("You cannot accept delivery with zero health") | |
3488 | 3516 | else { | |
3489 | - | let | |
3490 | - | let | |
3491 | - | let | |
3492 | - | let | |
3493 | - | let | |
3494 | - | let | |
3495 | - | if (if (( | |
3496 | - | then ( | |
3517 | + | let kF = V(bR) | |
3518 | + | let fY = valueOrElse(getInteger(kF), 0) | |
3519 | + | let nN = valueOrElse(getInteger(W(bR)), 0) | |
3520 | + | let nO = (aA / a) | |
3521 | + | let nP = valueOrElse(getInteger(do, d(bR)), 0) | |
3522 | + | let nQ = (aS + (nP / aT)) | |
3523 | + | if (if ((fY >= nQ)) | |
3524 | + | then (nN == nO) | |
3497 | 3525 | else false) | |
3498 | - | then throw((("You already used " + toString( | |
3499 | - | else if ( | |
3526 | + | then throw((("You already used " + toString(nQ)) + " delivery attempts for today")) | |
3527 | + | else if (kx(B)) | |
3500 | 3528 | then throw("acceptDelivery_checkTournament") | |
3501 | - | else if ( | |
3529 | + | else if (ky(B)) | |
3502 | 3530 | then throw("acceptDelivery_checkDelivery") | |
3503 | 3531 | else { | |
3504 | - | let | |
3505 | - | let | |
3506 | - | let | |
3507 | - | let | |
3508 | - | $Tuple2(([StringEntry(L(B), | |
3532 | + | let nR = dH(invoke(dk, "updateDeliveryLocked", [(kG + aQ)], nil)) | |
3533 | + | let ny = bP(B) | |
3534 | + | let jx = valueOrElse(getString(ny), aN) | |
3535 | + | let nS = (toString(aA) + "_D_0") | |
3536 | + | $Tuple2(([StringEntry(L(B), jx), StringEntry(ny, nS), IntegerEntry(kF, if ((nN != nO)) | |
3509 | 3537 | then 0 | |
3510 | - | else | |
3538 | + | else fY)] ++ lt), $Tuple2(nS, nR)) | |
3511 | 3539 | } | |
3512 | 3540 | } | |
3513 | 3541 | } | |
3514 | 3542 | } | |
3515 | 3543 | } | |
3516 | 3544 | ||
3517 | 3545 | ||
3518 | 3546 | ||
3519 | - | @Callable( | |
3520 | - | func checkDeliveryCallback (B) = if (( | |
3547 | + | @Callable(gR) | |
3548 | + | func checkDeliveryCallback (B) = if ((gR.caller != dn)) | |
3521 | 3549 | then throw("Access denied") | |
3522 | - | else $Tuple2(nil, ku(B)) | |
3550 | + | else $Tuple2(nil, ky(B)) | |
3551 | + | ||
3552 | + | ||
3553 | + | ||
3554 | + | @Callable(gR) | |
3555 | + | func buyRoboDuck () = if (!(cB)) | |
3556 | + | then throw("Feature is turned off") | |
3557 | + | else { | |
3558 | + | let lt = lp(gR) | |
3559 | + | if ((size(gR.payments) != 1)) | |
3560 | + | then throw("Exactly one payment required") | |
3561 | + | else { | |
3562 | + | let lu = value(gR.payments[0]) | |
3563 | + | if ((lu.assetId != cE)) | |
3564 | + | then throw("Allowed USDT payment only!") | |
3565 | + | else if ((lu.amount != em)) | |
3566 | + | then throw((("Payment attached should be " + dR(em, 6)) + " USDT")) | |
3567 | + | else { | |
3568 | + | let nT = valueOrElse(getInteger(eF()), 0) | |
3569 | + | let nU = toBytes(nT) | |
3570 | + | let ex = ((aH + "-") + takeRight(toBase16String(nU), 8)) | |
3571 | + | let nV = takeRight(toBase16String(sha256_16Kb(nU)), 6) | |
3572 | + | let iU = Issue(ex, ("Robo Duck NFT for WavesLands game, background color = #" + nV), 1, 0, false) | |
3573 | + | let bv = calculateAssetId(iU) | |
3574 | + | $Tuple2(((((lt :+ IntegerEntry(eF(), (nT + 1))) :+ iU) :+ ScriptTransfer(gR.originCaller, 1, bv)) :+ ScriptTransfer(dk, lu.amount, cE)), $Tuple2(toBase58String(bv), nV)) | |
3575 | + | } | |
3576 | + | } | |
3577 | + | } | |
3523 | 3578 | ||
3524 | 3579 |
github/deemru/w8io/026f985 1435.58 ms ◑