tx · AVkfSqiV8zEUWbE9TKtV3hHBm9GWWX2jL629BvQnBg1R

3PQNn3RcXkRCHHrBYxhVvbeQLa8R8KMjoFa:  -0.07500000 Waves

2023.06.24 23:11 [3702800] smart account 3PQNn3RcXkRCHHrBYxhVvbeQLa8R8KMjoFa > SELF 0.00000000 Waves

{ "type": 13, "id": "AVkfSqiV8zEUWbE9TKtV3hHBm9GWWX2jL629BvQnBg1R", "fee": 7500000, "feeAssetId": null, "timestamp": 1687637495450, "version": 2, "chainId": 87, "sender": "3PQNn3RcXkRCHHrBYxhVvbeQLa8R8KMjoFa", "senderPublicKey": "FMUD7Eo8pPt3UMp5vBW7GazCX7CeVEkf7xGZ3y5cJdaw", "proofs": [ "4yrF3Qyk2UAUJgiCHE9SLQqm51wwqoN9KowsjDv1KwubGV8iUq88329iFBWu11VSwdqYkhzQ5u6jdKWMpNgPpkCh" ], "script": "base64:BgKQAQgCEgASABIAEgASAwoBARITChEBAQEBAQEBAQEBAQEBAQEICBIWChQBAQEBAQEBCAgIAQEBAQEBAQEBARIHCgUBAQEICBIECgIBCBIFCgMBAQgSBwoFAQEBBAgSBQoDCAEIEgMKAQgSAwoBCBIAEgASAwoBCBIFCgMIAQgSAwoBARIAEgMKAQgSABIECgIICLYBAAxrX2Jhc2VPcmFjbGUCDGtfYmFzZU9yYWNsZQANa19xdW90ZU9yYWNsZQINa19xdW90ZU9yYWNsZQAJa19iYWxhbmNlAglrX2JhbGFuY2UACmtfc2VxdWVuY2UCCmtfc2VxdWVuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19wb3NpdGlvbk1hcmdpbgIQa19wb3NpdGlvbk1hcmdpbgAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAIWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgISa19wb3NpdGlvbkZyYWN0aW9uABJrX3Bvc2l0aW9uU2VxdWVuY2UCEmtfcG9zaXRpb25TZXF1ZW5jZQANa19wb3NpdGlvbkZlZQINa19wb3NpdGlvbkZlZQAea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wAhNrX3Bvc2l0aW9uVGltZXN0YW1wAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQAC2tfY2xvc2VPbmx5AgtrX2Nsb3NlT25seQAFa19mZWUCBWtfZmVlAA1rX3JvbGxvdmVyRmVlAg5rX3JvbGxvdmVyX2ZlZQAPa19mdW5kaW5nUGVyaW9kAg9rX2Z1bmRpbmdQZXJpb2QAEWtfaW5pdE1hcmdpblJhdGlvAhFrX2luaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8AGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8CFmtfcGFydExpcXVpZGF0aW9uUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAEWtfbWF4T3Blbk5vdGlvbmFsAhFrX21heE9wZW5Ob3Rpb25hbAAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAEGtfbWF4T3JhY2xlRGVsYXkCEGtfbWF4T3JhY2xlRGVsYXkADWtfZnVuZGluZ01vZGUCDWtfZnVuZGluZ01vZGUADGtfb3JhY2xlTW9kZQIMa19vcmFjbGVNb2RlACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAEmtfcXVvdGVBc3NldFdlaWdodAIIa19xdEFzdFcAEWtfYmFzZUFzc2V0V2VpZ2h0AghrX2JzQXN0VwATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAATa19vcGVuSW50ZXJlc3RTaG9ydAITa19vcGVuSW50ZXJlc3RTaG9ydAASa19vcGVuSW50ZXJlc3RMb25nAhJrX29wZW5JbnRlcmVzdExvbmcACGtfbGFzdFR4AghrX2xhc3RUeAAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzAA9rX3ZhdWx0X2FkZHJlc3MCD2tfdmF1bHRfYWRkcmVzcwAPa19hZG1pbl9hZGRyZXNzAg9rX2FkbWluX2FkZHJlc3MADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0AQ5zdGFraW5nQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX3N0YWtpbmdfYWRkcmVzcwIPU3Rha2luZyBub3Qgc2V0AQx2YXVsdEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa192YXVsdF9hZGRyZXNzAg1WYXVsdCBub3Qgc2V0AQxtaW5lckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19taW5lcl9hZGRyZXNzAg1NaW5lciBub3Qgc2V0AQ1vcmRlcnNBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEGtfb3JkZXJzX2FkZHJlc3MCDk9yZGVycyBub3Qgc2V0AQ9yZWZlcnJhbEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19yZWZlcnJhbF9hZGRyZXNzAhBSZWZlcnJhbCBub3Qgc2V0ARFuZnRNYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCE05GVCBNYW5hZ2VyIG5vdCBzZXQADWtfdG9rZW5fcGFyYW0CDWtfdG9rZW5fcGFyYW0ADGtfdG9rZW5fdHlwZQIMa190b2tlbl90eXBlABhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUCDWZlZV9yZWR1Y3Rpb24ACERJUl9MT05HAAEACURJUl9TSE9SVAACAAdTRUNPTkRTAOgHAA9ERUNJTUFMX05VTUJFUlMABgAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoAD01JTlVURVNfSU5fWUVBUgkAaAIAoIogBQxERUNJTUFMX1VOSVQAB09ORV9EQVkJAGgCAICjBQUMREVDSU1BTF9VTklUAA9QTkxfT1BUSU9OX1NQT1QAAQARUE5MX09QVElPTl9PUkFDTEUAAgASRlVORElOR19BU1lNTUVUUklDAAEAEUZVTkRJTkdfU1lNTUVUUklDAAIADE9SQUNMRV9QTEFJTgABAApPUkFDTEVfSklUAAIBAXMBAl94CQCsAgIJAKQDAQUCX3gCASwBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEFYmRpdmQCAl94Al95CQC9AgQFAl94CQC2AgEFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQVibXVsZAICX3gCX3kJAL0CBAUCX3gFAl95CQC2AgEFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBWludE9yAgFrA2RlZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrBQNkZWYBBHN0ckECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBBGludEECCF9hZGRyZXNzBF9rZXkEA3ZhbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCF9hZGRyZXNzBQRfa2V5CQCsAgICEU5vIHZhbHVlIGZvciBrZXkgBQRfa2V5BQN2YWwBCGNiYWxhbmNlAAkBA2ludAEFCWtfYmFsYW5jZQEJY2JhbGFuY2UwAAkBBWludE9yAgUJa19iYWxhbmNlAAABA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPcm9sbG92ZXJGZWVSYXRlAAkBA2ludAEFDWtfcm9sbG92ZXJGZWUBD2luaXRNYXJnaW5SYXRpbwAJAQNpbnQBBRFrX2luaXRNYXJnaW5SYXRpbwEGcXRBc3RSAAkBA2ludAEFE2tfcXVvdGVBc3NldFJlc2VydmUBB3F0QXN0UjAACQEFaW50T3ICBRNrX3F1b3RlQXNzZXRSZXNlcnZlAAABBmJzQXN0UgAJAQNpbnQBBRJrX2Jhc2VBc3NldFJlc2VydmUBB2JzQXN0UjAACQEFaW50T3ICBRJrX2Jhc2VBc3NldFJlc2VydmUAAAEGcXRBc3RXAAkBBWludE9yAgUSa19xdW90ZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBBmJzQXN0VwAJAQVpbnRPcgIFEWtfYmFzZUFzc2V0V2VpZ2h0BQxERUNJTUFMX1VOSVQBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAkBA2ludAEFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwBEW9wZW5JbnRlcmVzdFNob3J0AAkBA2ludAEFE2tfb3BlbkludGVyZXN0U2hvcnQBEG9wZW5JbnRlcmVzdExvbmcACQEDaW50AQUSa19vcGVuSW50ZXJlc3RMb25nARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQEDaW50AQUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEObWF4UHJpY2VTcHJlYWQACQEDaW50AQUQa19tYXhQcmljZVNwcmVhZAEPbWF4T3Blbk5vdGlvbmFsAAkBA2ludAEFEWtfbWF4T3Blbk5vdGlvbmFsASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEDaW50AQUYa190b3RhbFNob3J0UG9zaXRpb25TaXplARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEDaW50AQUXa190b3RhbExvbmdQb3NpdGlvblNpemUBDGxhc3RTZXF1ZW5jZQAJAQVpbnRPcgIFCmtfc2VxdWVuY2UAAAETZmVlVG9TdGFrZXJzUGVyY2VudAAJAQNpbnQBBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQBDm1heE9yYWNsZURlbGF5AAkBA2ludAEFEGtfbWF4T3JhY2xlRGVsYXkBC2Z1bmRpbmdNb2RlAAkBBWludE9yAgUNa19mdW5kaW5nTW9kZQUSRlVORElOR19BU1lNTUVUUklDAQpvcmFjbGVNb2RlAAkBBWludE9yAgUMa19vcmFjbGVNb2RlBQxPUkFDTEVfUExBSU4BDWxhc3RUaW1lc3RhbXAACAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEPZ2V0QWN0dWFsQ2FsbGVyAQFpCQELdmFsdWVPckVsc2UCCQCdCAIJAQ1vcmRlcnNBZGRyZXNzAAIIa19zZW5kZXIJAKUIAQgFAWkGY2FsbGVyARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwxfbWFyZ2luUmF0aW8QX2Jhc2VNYXJnaW5SYXRpbxRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQUcmVtYWluaW5nTWFyZ2luUmF0aW8JAGUCBQxfbWFyZ2luUmF0aW8FEF9iYXNlTWFyZ2luUmF0aW8DAwUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGYCAAAFFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPCAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDID4gCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8GAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECLFNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggX3Bvc2l0aW9uU2l6ZSA9PSAwAwkAZgIFDV9wb3NpdGlvblNpemUAAAkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgABC2dldFBvc2l0aW9uAgdfdHJhZGVyCl9kaXJlY3Rpb24EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFC3Bvc2l0aW9uS2V5BAckbWF0Y2gwBQ9wb3NpdGlvblNpemVPcHQDCQABAgUHJG1hdGNoMAIDSW50BAxwb3NpdGlvblNpemUFByRtYXRjaDAJAJcKBQUMcG9zaXRpb25TaXplCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQtwb3NpdGlvbktleQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAULcG9zaXRpb25LZXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FC3Bvc2l0aW9uS2V5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFC3Bvc2l0aW9uS2V5CQCXCgUAAAAAAAAAAAAAAQxnZXREaXJlY3Rpb24BDV9wb3NpdGlvblNpemUDCQBmAgAABQ1fcG9zaXRpb25TaXplBQlESVJfU0hPUlQFCERJUl9MT05HAQ5nZXRQb3NpdGlvbkZlZQIHX3RyYWRlcgpfZGlyZWN0aW9uBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgQOcG9zaXRpb25GZWVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQULcG9zaXRpb25LZXkEByRtYXRjaDAFDnBvc2l0aW9uRmVlT3B0AwkAAQIFByRtYXRjaDACA0ludAQLcG9zaXRpb25GZWUFByRtYXRjaDAFC3Bvc2l0aW9uRmVlCQEDZmVlAAETcmVxdWlyZU9wZW5Qb3NpdGlvbgIHX3RyYWRlcgpfZGlyZWN0aW9uAwkAAAIICQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uAl8xAAAJAAIBAhBObyBvcGVuIHBvc2l0aW9uBgENZ2V0T3JhY2xlRGF0YQEDa2V5BA1vcmFjbGVEYXRhU3RyCQCdCAIFBHRoaXMFA2tleQMDCQEJaXNEZWZpbmVkAQUNb3JhY2xlRGF0YVN0cgkBAiE9AgkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgIABwQKb3JhY2xlRGF0YQkAtQkCCQEFdmFsdWUBBQ1vcmFjbGVEYXRhU3RyAgEsBA1vcmFjbGVBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQpvcmFjbGVEYXRhAAAJAKwCAgIbSW52YWxpZCBvcmFjbGUgYWRkcmVzcyBpbjogCQEFdmFsdWUBBQ1vcmFjbGVEYXRhU3RyBAhwcmljZUtleQkAkQMCBQpvcmFjbGVEYXRhAAEECGJsb2NrS2V5CQCRAwIFCm9yYWNsZURhdGEAAgQHb3BlbktleQkAkQMCBQpvcmFjbGVEYXRhAAMJAJYKBAUNb3JhY2xlQWRkcmVzcwUIcHJpY2VLZXkFCGJsb2NrS2V5BQdvcGVuS2V5BQR1bml0AQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBBnBhdXNlZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUIa19wYXVzZWQHAQljbG9zZU9ubHkACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFC2tfY2xvc2VPbmx5BwENdXBkYXRlUmVzZXJ2ZQMGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50EF9iYXNlQXNzZXRBbW91bnQDBQZfaXNBZGQEB25ld0Jhc2UJAGUCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAMJAGcCAAAFB25ld0Jhc2UJAAIBAipUeCBsZWFkIHRvIGJhc2UgYXNzZXQgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwkAZAIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAUHbmV3QmFzZQkAZAIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQECG5ld1F1b3RlCQBlAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50AwkAZwIAAAUIbmV3UXVvdGUJAAIBAipUeCBsZWFkIHRvIGJhc2UgcXVvdGUgcmVzZXJ2ZSA8PSAwLCByZXZlcnQJAJUKAwUIbmV3UXVvdGUJAGQCCQEGYnNBc3RSAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARF0b3RhbFBvc2l0aW9uU2l6ZQAFEF9iYXNlQXNzZXRBbW91bnQBDWNhbGNJbnZhcmlhbnQCB19xdEFzdFIHX2JzQXN0UgQHYnF0QXN0UgkAtgIBBQdfcXRBc3RSBAdiYnNBc3RSCQC2AgEFB19ic0FzdFIJAQVibXVsZAIFB2JxdEFzdFIFB2Jic0FzdFIBCXN3YXBJbnB1dAIGX2lzQWRkEV9xdW90ZUFzc2V0QW1vdW50BAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BQdfcXRBc3RXBAFrCQENY2FsY0ludmFyaWFudAIFB19xdEFzdFIFB19ic0FzdFIEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIDBQZfaXNBZGQJAGQCBQdfcXRBc3RSBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQJAGUCBQdfcXRBc3RSBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQEFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIEGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBA2FicwEJAGUCBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFB19ic0FzdFIEFWFtb3VudEJhc2VBc3NldEJvdWdodAMFBl9pc0FkZAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEBLQEFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQNJHQwMTU5MjYxNjA5NgkBDXVwZGF0ZVJlc2VydmUDBQZfaXNBZGQFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE1OTI2MTYwOTYCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNTkyNjE2MDk2Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE1OTI2MTYwOTYCXzMEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAttYXJrZXRQcmljZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAADCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBQdfcXRBc3RSAhQgYmVmb3JlIGJhc2UgYXNzZXQ6IAkApAMBBQdfYnNBc3RSAiEgcXVvdGUgYXNzZXQgYW1vdW50IHRvIGV4Y2hhbmdlOiAJAKQDAQURX3F1b3RlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIOIG1hcmtldFByaWNlOiAJAKQDAQULbWFya2V0UHJpY2UJAJYKBAUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEBD2NhbGNSb2xsb3ZlckZlZQISX29sZFBvc2l0aW9uTWFyZ2luIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBA9wb3NpdGlvbk1pbnV0ZXMJAGgCCQBpAgkAaQIJAGUCCQENbGFzdFRpbWVzdGFtcAAFIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wAOgHADwFDERFQ0lNQUxfVU5JVAQLcm9sbG92ZXJGZWUJAQRkaXZkAgkBBG11bGQCCQEEbXVsZAIFEl9vbGRQb3NpdGlvbk1hcmdpbgUPcG9zaXRpb25NaW51dGVzCQEPcm9sbG92ZXJGZWVSYXRlAAUPTUlOVVRFU19JTl9ZRUFSBQtyb2xsb3ZlckZlZQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBRBfb2xkUG9zaXRpb25TaXplEl9vbGRQb3NpdGlvbk1hcmdpbiVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wDF9tYXJnaW5EZWx0YQQOZnVuZGluZ1BheW1lbnQDCQECIT0CBRBfb2xkUG9zaXRpb25TaXplAAAEIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFEF9vbGRQb3NpdGlvblNpemUJAQRtdWxkAgkAZQIFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfb2xkUG9zaXRpb25DdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBRBfb2xkUG9zaXRpb25TaXplAAAEC3JvbGxvdmVyRmVlCQEPY2FsY1JvbGxvdmVyRmVlAgUSX29sZFBvc2l0aW9uTWFyZ2luBSBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAQMc2lnbmVkTWFyZ2luCQBkAgkAZQIJAGUCBQxfbWFyZ2luRGVsdGEFC3JvbGxvdmVyRmVlBQ5mdW5kaW5nUGF5bWVudAUSX29sZFBvc2l0aW9uTWFyZ2luBA0kdDAxODc2MzE4ODkwAwkAZgIAAAUMc2lnbmVkTWFyZ2luCQCUCgIAAAkBA2FicwEFDHNpZ25lZE1hcmdpbgkAlAoCCQEDYWJzAQUMc2lnbmVkTWFyZ2luAAAEDHJlbWFpbk1hcmdpbggFDSR0MDE4NzYzMTg4OTACXzEEB2JhZERlYnQIBQ0kdDAxODc2MzE4ODkwAl8yCQCWCgQFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUOZnVuZGluZ1BheW1lbnQFC3JvbGxvdmVyRmVlARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQLcHJpY2VCZWZvcmUJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0CQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0AwkAAAIFEF9iYXNlQXNzZXRBbW91bnQAAAkAAgECGUludmFsaWQgYmFzZSBhc3NldCBhbW91bnQEAWsJAQ1jYWxjSW52YXJpYW50AgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQQYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyAwUGX2lzQWRkCQBkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQJAGUCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAQPcXVvdGVBc3NldEFmdGVyCQCgAwEJAQViZGl2ZAIFAWsJALYCAQUYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyBA9xdW90ZUFzc2V0RGVsdGEJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyBRJfcXVvdGVBc3NldFJlc2VydmUEDnF1b3RlQXNzZXRTb2xkCQEEbXVsZAIFD3F1b3RlQXNzZXREZWx0YQURX3F1b3RlQXNzZXRXZWlnaHQEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDIwMTUyMjAzMTQJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFD3F1b3RlQXNzZXREZWx0YQUQX2Jhc2VBc3NldEFtb3VudAQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAyMDE1MjIwMzE0Al8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMjAxNTIyMDMxNAJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAyMDE1MjIwMzE0Al8zBAttYXJrZXRQcmljZQkBBGRpdmQCBQ5xdW90ZUFzc2V0U29sZAUQX2Jhc2VBc3NldEFtb3VudAQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmAwMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQUUX2NoZWNrTWF4UHJpY2VJbXBhY3QHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUSX3F1b3RlQXNzZXRSZXNlcnZlAhQgYmVmb3JlIGJhc2UgYXNzZXQ6IAkApAMBBRFfYmFzZUFzc2V0UmVzZXJ2ZQIgIGJhc2UgYXNzZXQgYW1vdW50IHRvIGV4Y2hhbmdlOiAJAKQDAQUQX2Jhc2VBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg8gbWFya2V0IHByaWNlOiAJAKQDAQULbWFya2V0UHJpY2UJAJkKBwUOcXVvdGVBc3NldFNvbGQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkBASEBBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAFC3ByaWNlSW1wYWN0AQpzd2FwT3V0cHV0AwZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdAkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHBQZfaXNBZGQFEF9iYXNlQXNzZXRBbW91bnQFFF9jaGVja01heFByaWNlSW1wYWN0CQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAETZ2V0T3JhY2xlUHJpY2VWYWx1ZQMGb3JhY2xlCHByaWNlS2V5CGJsb2NrS2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQMJAQIhPQIFCGJsb2NrS2V5AgAEDGN1cnJlbnRCbG9jawUGaGVpZ2h0BA9sYXN0T3JhY2xlQmxvY2sJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCGJsb2NrS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgYmxvY2suIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhibG9ja0tleQMJAGYCCQBlAgUMY3VycmVudEJsb2NrBQ9sYXN0T3JhY2xlQmxvY2sJAQ5tYXhPcmFjbGVEZWxheQAJAAIBCQCsAgIJAKwCAgkArAICAiZPcmFjbGUgc3RhbGUgZGF0YS4gTGFzdCBvcmFjbGUgYmxvY2s6IAkApAMBBQ9sYXN0T3JhY2xlQmxvY2sCECBjdXJyZW50IGJsb2NrOiAJAKQDAQUMY3VycmVudEJsb2NrBQlsYXN0VmFsdWUFCWxhc3RWYWx1ZQEOZ2V0T3JhY2xlUHJpY2UABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBA9iYXNlT3JhY2xlUHJpY2UJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFCmJhc2VPcmFjbGUCXzEIBQpiYXNlT3JhY2xlAl8yCAUKYmFzZU9yYWNsZQJfMwQLcXVvdGVPcmFjbGUJAQ1nZXRPcmFjbGVEYXRhAQUNa19xdW90ZU9yYWNsZQQQcXVvdGVPcmFjbGVQcmljZQMJAQlpc0RlZmluZWQBBQtxdW90ZU9yYWNsZQQMcXVvdGVPcmFjbGVWCQEFdmFsdWUBBQtxdW90ZU9yYWNsZQkBE2dldE9yYWNsZVByaWNlVmFsdWUDCAUMcXVvdGVPcmFjbGVWAl8xCAUMcXVvdGVPcmFjbGVWAl8yCAUMcXVvdGVPcmFjbGVWAl8zBQxERUNJTUFMX1VOSVQJAQRkaXZkAgUPYmFzZU9yYWNsZVByaWNlBRBxdW90ZU9yYWNsZVByaWNlAQ5pc01hcmtldENsb3NlZAAECmJhc2VPcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDWdldE9yYWNsZURhdGEBBQxrX2Jhc2VPcmFjbGUCGU5vIGJhc2UgYXNzZXQgb3JhY2xlIGRhdGEEBm9yYWNsZQgFCmJhc2VPcmFjbGUCXzEEB29wZW5LZXkIBQpiYXNlT3JhY2xlAl80AwkBAiE9AgUHb3BlbktleQIABAZpc09wZW4JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmwgCBQZvcmFjbGUFB29wZW5LZXkJAKwCAgkArAICCQCsAgICK0NhbiBub3QgZ2V0IG9yYWNsZSBpcyBvcGVuL2Nsb3NlZC4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFB29wZW5LZXkJAQEhAQUGaXNPcGVuBwEMYWJzUHJpY2VEaWZmBQxfb3JhY2xlUHJpY2USX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlB19xdEFzdFcHX2JzQXN0VwQKcHJpY2VBZnRlcgkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwQMYXZlcmFnZVByaWNlCQEEZGl2ZAIJAGQCBQxfb3JhY2xlUHJpY2UFCnByaWNlQWZ0ZXIJAGgCAAIFDERFQ0lNQUxfVU5JVAQMYWJzUHJpY2VEaWZmCQEEZGl2ZAIJAQNhYnMBCQBlAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyBQxhdmVyYWdlUHJpY2UFDGFic1ByaWNlRGlmZgEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAISX3F1b3RlQXNzZXRSZXNlcnZlEV9iYXNlQXNzZXRSZXNlcnZlBAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBJhYnNQcmljZURpZmZCZWZvcmUJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQkBBnF0QXN0UgAJAQZic0FzdFIABQdfcXRBc3RXBQdfYnNBc3RXBBFhYnNQcmljZURpZmZBZnRlcgkBDGFic1ByaWNlRGlmZgUFC29yYWNsZVByaWNlBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBQdfcXRBc3RXBQdfYnNBc3RXAwMJAGYCBRFhYnNQcmljZURpZmZBZnRlcgkBDm1heFByaWNlU3ByZWFkAAkAZgIFEWFic1ByaWNlRGlmZkFmdGVyBRJhYnNQcmljZURpZmZCZWZvcmUHCQACAQkArAICCQCsAgIJAKwCAgINUHJpY2Ugc3ByZWFkIAkApAMBBRFhYnNQcmljZURpZmZBZnRlcgIUID4gbWF4IHByaWNlIHNwcmVhZCAJAKQDAQkBDm1heFByaWNlU3ByZWFkAAYBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAhFfbG9uZ09wZW5Ob3Rpb25hbBJfc2hvcnRPcGVuTm90aW9uYWwEEF9tYXhPcGVuTm90aW9uYWwJAQ9tYXhPcGVuTm90aW9uYWwAAwkAZgIFEV9sb25nT3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgITTG9uZyBvcGVuIG5vdGlvbmFsIAkApAMBBRFfbG9uZ09wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwDCQBmAgUSX3Nob3J0T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQACAQkArAICCQCsAgIJAKwCAgIUU2hvcnQgb3BlbiBub3Rpb25hbCAJAKQDAQUSX3Nob3J0T3Blbk5vdGlvbmFsAhUgPiBtYXggb3BlbiBub3Rpb25hbCAJAKQDAQUQX21heE9wZW5Ob3Rpb25hbAYBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcACQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBQdfcXRBc3RXCQEEbXVsZAIFEV9iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RXARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDGN1cnJlbnRQcmljZQkBDGdldFNwb3RQcmljZQAJAGYCCQEEZGl2ZAIJAQNhYnMBCQBlAgULb3JhY2xlUHJpY2UFDGN1cnJlbnRQcmljZQULb3JhY2xlUHJpY2UJAQtzcHJlYWRMaW1pdAABH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGDV9wb3NpdGlvblNpemUHX29wdGlvbhJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE291dFBvc2l0aW9uTm90aW9uYWwICQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcJAQEhAQUHaXNTaG9ydAUPcG9zaXRpb25TaXplQWJzBwUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQCXzEFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEOZ2V0T3JhY2xlUHJpY2UABRBwb3NpdGlvbk5vdGlvbmFsAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBw1fcG9zaXRpb25TaXplFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbBJfcXVvdGVBc3NldFJlc2VydmURX3F1b3RlQXNzZXRXZWlnaHQRX2Jhc2VBc3NldFJlc2VydmUQX2Jhc2VBc3NldFdlaWdodAdfb3B0aW9uAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAAgECFUludmFsaWQgcG9zaXRpb24gc2l6ZQQHaXNTaG9ydAkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAkBH2dldFBvc2l0aW9uQWRqdXN0ZWRPcGVuTm90aW9uYWwGBQ1fcG9zaXRpb25TaXplBQdfb3B0aW9uBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRVfcG9zaXRpb25PcGVuTm90aW9uYWwFEHBvc2l0aW9uTm90aW9uYWwJAGUCBRBwb3NpdGlvbk5vdGlvbmFsBRVfcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDB190cmFkZXIKX2RpcmVjdGlvbgdfb3B0aW9uBA0kdDAyODE5OTI4MzM5CQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBAxwb3NpdGlvblNpemUIBQ0kdDAyODE5OTI4MzM5Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI4MTk5MjgzMzkCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMjgxOTkyODMzOQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAyODE5OTI4MzM5Al80CQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDHBvc2l0aW9uU2l6ZQUUcG9zaXRpb25PcGVuTm90aW9uYWwJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcABQdfb3B0aW9uAQ9jYWxjTWFyZ2luUmF0aW8DDV9yZW1haW5NYXJnaW4IX2JhZERlYnQRX3Bvc2l0aW9uTm90aW9uYWwJAQRkaXZkAgkAZQIFDV9yZW1haW5NYXJnaW4FCF9iYWREZWJ0BRFfcG9zaXRpb25Ob3Rpb25hbAEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMHX3RyYWRlcgpfZGlyZWN0aW9uB19vcHRpb24EDSR0MDI4ODcxMjkwMjQJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24EDHBvc2l0aW9uU2l6ZQgFDSR0MDI4ODcxMjkwMjQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjg4NzEyOTAyNAJfMgQDcG9uCAUNJHQwMjg4NzEyOTAyNAJfMwQWcG9zaXRpb25MYXN0VXBkYXRlZENQRggFDSR0MDI4ODcxMjkwMjQCXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwMjg4NzEyOTAyNAJfNQQNJHQwMjkwMzAyOTEzNQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUHX29wdGlvbgQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDI5MDMwMjkxMzUCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAyOTAzMDI5MTM1Al8yBA0kdDAyOTE0MDI5MzUyCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgUWcG9zaXRpb25MYXN0VXBkYXRlZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDI5MTQwMjkzNTICXzEEB2JhZERlYnQIBQ0kdDAyOTE0MDI5MzUyAl8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwIHX3RyYWRlcgpfZGlyZWN0aW9uCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMFB190cmFkZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgdfdHJhZGVyDV9wb3NpdGlvblNpemUEDG1heGltdW1SYXRpbwkBBHZtYXgCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ACQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIJAQ5nZXRNYXJnaW5SYXRpbwIFB190cmFkZXIJAQxnZXREaXJlY3Rpb24BBQ1fcG9zaXRpb25TaXplCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAEGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQUMbWF4aW11bVJhdGlvBApzd2FwUmVzdWx0CQEKc3dhcE91dHB1dAMJAGYCBQ1fcG9zaXRpb25TaXplAAAFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQcEHG1heEV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQpzd2FwUmVzdWx0Al8xBAtwcmljZUltcGFjdAgFCnN3YXBSZXN1bHQCXzcDCQBmAgkBDm1heFByaWNlSW1wYWN0AAULcHJpY2VJbXBhY3QFGG1heEV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uCAdfdHJhZGVyCl9kaXJlY3Rpb24FX3NpemUEX2ZlZRRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4UX2NoZWNrTWF4UHJpY2VJbXBhY3QKX2xpcXVpZGF0ZQQNJHQwMzA1MTUzMDY4MwkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzA1MTUzMDY4MwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzMDUxNTMwNjgzAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDMwNTE1MzA2ODMCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzA1MTUzMDY4MwJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAzMDUxNTMwNjgzAl81BA5pc0xvbmdQb3NpdGlvbgkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABBJhYnNPbGRQb3NpdGlvblNpemUJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUDAwkAZwIFEmFic09sZFBvc2l0aW9uU2l6ZQUFX3NpemUJAGYCBQVfc2l6ZQAABwQOaXNQYXJ0aWFsQ2xvc2UJAGYCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplBA0kdDAzMDk3NTMxNDI2CQEKc3dhcE91dHB1dAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUFX3NpemUFFF9jaGVja01heFByaWNlSW1wYWN0BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwMzA5NzUzMTQyNgJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDMwOTc1MzE0MjYCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDMwOTc1MzE0MjYCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzMDk3NTMxNDI2Al80BBVleGNoYW5nZWRQb3NpdGlvblNpemUDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAQEtAQUFX3NpemUFBV9zaXplBA0kdDAzMTY0MTMxODY1CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAzMTY0MTMxODY1Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMzE2NDEzMTg2NQJfMgQNcmVhbGl6ZWRSYXRpbwkBBGRpdmQCCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBRJhYnNPbGRQb3NpdGlvblNpemUEC3JlYWxpemVkUG5sCQEEbXVsZAIFDXVucmVhbGl6ZWRQbmwFDXJlYWxpemVkUmF0aW8EDSR0MDMyMjA2MzI0NTIJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEEnJlbWFpbk1hcmdpbkJlZm9yZQgFDSR0MDMyMjA2MzI0NTICXzEEAngxCAUNJHQwMzIyMDYzMjQ1MgJfMgQCeDIIBQ0kdDAzMjIwNjMyNDUyAl8zBAtyb2xsb3ZlckZlZQgFDSR0MDMyMjA2MzI0NTICXzQED3Bvc2l0aW9uQmFkRGVidAgJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFC3JlYWxpemVkUG5sAl8yBBByZWFsaXplZENsb3NlRmVlCQEEbXVsZAIJAQRtdWxkAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUNcmVhbGl6ZWRSYXRpbwUEX2ZlZQQSdW5yZWFsaXplZFBubEFmdGVyCQBlAgUNdW5yZWFsaXplZFBubAULcmVhbGl6ZWRQbmwEEnJlbWFpbk9wZW5Ob3Rpb25hbAMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAGUCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQBkAgUSdW5yZWFsaXplZFBubEFmdGVyBRNvbGRQb3NpdGlvbk5vdGlvbmFsBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQQNJHQwMzM4NTgzNDI0NAMJAAACBQ9uZXdQb3NpdGlvblNpemUAAAkAlAoCAAAAAAkAlAoCCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzMzg1ODM0MjQ0Al8xBBRuZXdQb3NpdGlvbkxzdFVwZENQRggFDSR0MDMzODU4MzQyNDQCXzIEEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBAttYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24DBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAZQIJAQRtdWxkAgkAZAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC21hcmdpblJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCCQEEbXVsZAIJAGUCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyBBFtYXJnaW5Ub1RyYWRlclJhdwkAZQIJAGUCBRJyZW1haW5NYXJnaW5CZWZvcmUJAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgUQcmVhbGl6ZWRDbG9zZUZlZQQObWFyZ2luVG9UcmFkZXIDCQBmAgAABRFtYXJnaW5Ub1RyYWRlclJhdwMFCl9saXF1aWRhdGUAAAkAAgECN0ludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogdW5hYmxlIHRvIHBheSBmZWUFEW1hcmdpblRvVHJhZGVyUmF3BBFuZXdQb3NpdGlvbk1hcmdpbgMFDF9hZGRUb01hcmdpbgkAZAIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwUObWFyZ2luVG9UcmFkZXIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwMDCQECIT0CBRRfbWluUXVvdGVBc3NldEFtb3VudAAACQBmAgUUX21pblF1b3RlQXNzZXRBbW91bnQFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50AgMgPCAJAKQDAQUUX21pblF1b3RlQXNzZXRBbW91bnQJAKMKEQUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGBQ9wb3NpdGlvbkJhZERlYnQFC3JlYWxpemVkUG5sAwMFDF9hZGRUb01hcmdpbgUOaXNQYXJ0aWFsQ2xvc2UHAAAFDm1hcmdpblRvVHJhZGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRFvcGVuTm90aW9uYWxEZWx0YQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUOaXNMb25nUG9zaXRpb24JAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARBvcGVuSW50ZXJlc3RMb25nAAMFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBlAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAQEhAQUOaXNMb25nUG9zaXRpb24FEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGQCBRByZWFsaXplZENsb3NlRmVlBQtyb2xsb3ZlckZlZQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgICPUludmFsaWQgaW50ZXJuYWxDbG9zZVBvc2l0aW9uIHBhcmFtczogaW52YWxpZCBwb3NpdGlvbiBzaXplOiAJAKQDAQUFX3NpemUCBiBtYXg6IAkApAMBBRJhYnNPbGRQb3NpdGlvblNpemUBE2dldFRlcm1pbmFsQW1tU3RhdGUABA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAkAlAoCCQEGcXRBc3RSAAkBBmJzQXN0UgAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQNJHQwMzc0OTEzNzY3MAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwQVY3VycmVudE5ldE1hcmtldFZhbHVlCAUNJHQwMzc0OTEzNzY3MAJfMQQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDM3NDkxMzc2NzACXzIEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDM3NDkxMzc2NzACXzMJAJQKAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlARNnZXRRdW90ZUFzc2V0V2VpZ2h0BBBiYXNlQXNzZXRSZXNlcnZlEXRvdGFsUG9zaXRpb25TaXplEXF1b3RlQXNzZXRSZXNlcnZlC3RhcmdldFByaWNlBAFiCQC2AgEFEGJhc2VBc3NldFJlc2VydmUEAnN6CQC2AgEFEXRvdGFsUG9zaXRpb25TaXplBAFxCQC2AgEFEXF1b3RlQXNzZXRSZXNlcnZlBAFwCQC2AgEFC3RhcmdldFByaWNlBAFrCQEFYm11bGQCBQFxBQFiBARuZXdCCQC3AgIFAWIFAnN6BARuZXdRCQEFYmRpdmQCBQFrBQRuZXdCBAF6CQEFYmRpdmQCBQRuZXdRBQRuZXdCBAZyZXN1bHQJAQViZGl2ZAIFAXAFAXoJAKADAQUGcmVzdWx0ARRnZXRTeW5jVGVybWluYWxQcmljZQMOX3Rlcm1pbmFsUHJpY2UHX3F0QXN0UgdfYnNBc3RSBA1fcG9zaXRpb25TaXplCQERdG90YWxQb3NpdGlvblNpemUAAwkAAAIFDV9wb3NpdGlvblNpemUAAAQJbmV3UXRBc3RXCQEEZGl2ZAIJAQRtdWxkAgUOX3Rlcm1pbmFsUHJpY2UFB19ic0FzdFIFB19xdEFzdFIJAJUKAwUJbmV3UXRBc3RXBQxERUNJTUFMX1VOSVQAAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABBVjdXJyZW50TmV0TWFya2V0VmFsdWUICQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHAl8xBAluZXdRdEFzdFcJARNnZXRRdW90ZUFzc2V0V2VpZ2h0BAUHX2JzQXN0UgUNX3Bvc2l0aW9uU2l6ZQUHX3F0QXN0UgUOX3Rlcm1pbmFsUHJpY2UECW5ld0JzQXN0VwUMREVDSU1BTF9VTklUBA1tYXJnaW5Ub1ZhdWx0CAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQ1fcG9zaXRpb25TaXplBRVjdXJyZW50TmV0TWFya2V0VmFsdWUFB19xdEFzdFIFCW5ld1F0QXN0VwUHX2JzQXN0UgUJbmV3QnNBc3RXBQ9QTkxfT1BUSU9OX1NQT1QCXzIJAJUKAwUJbmV3UXRBc3RXBQluZXdCc0FzdFcFDW1hcmdpblRvVmF1bHQBCmdldEZ1bmRpbmcABA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAECXNwb3RQcmljZQkBDGdldFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQlzcG90UHJpY2UFD3VuZGVybHlpbmdQcmljZQMDCQEOaXNNYXJrZXRDbG9zZWQABgMJAAACCQELZnVuZGluZ01vZGUABRJGVU5ESU5HX0FTWU1NRVRSSUMDCQAAAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAAAGCQAAAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAAAAcJAJUKAwAAAAAAAAMJAGYCAAAFB3ByZW1pdW0EFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQMJAAACCQELZnVuZGluZ01vZGUABRJGVU5ESU5HX0FTWU1NRVRSSUMEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkAlQoDBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgAABBlzaG9ydFRvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUABBhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAQOcHJlbWl1bVRvVmF1bHQJAGUCBRlzaG9ydFRvdGFsUHJlbWl1bUZyYWN0aW9uBRhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24JAJUKAwUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ5wcmVtaXVtVG9WYXVsdAQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkDCQAAAgkBC2Z1bmRpbmdNb2RlAAUSRlVORElOR19BU1lNTUVUUklDBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAJUKAwUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24AAAQYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAQZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUABA5wcmVtaXVtVG9WYXVsdAkAZQIFGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgUZc2hvcnRUb3RhbFByZW1pdW1GcmFjdGlvbgkAlQoDBRNsb25nUHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ5wcmVtaXVtVG9WYXVsdAEOZ2V0QWRqdXN0ZWRGZWUCC19hcnRpZmFjdElkEF9iYXNlRmVlRGlzY291bnQECmJhc2VGZWVSYXcJAQNmZWUABAdiYXNlRmVlCQEEbXVsZAIFCmJhc2VGZWVSYXcFEF9iYXNlRmVlRGlzY291bnQEDSR0MDQyMzM0NDI4MjkDCQECIT0CBQtfYXJ0aWZhY3RJZAIABAxhcnRpZmFjdEtpbmQJAQRzdHJBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUMa190b2tlbl90eXBlBQtfYXJ0aWZhY3RJZAMJAAACBQxhcnRpZmFjdEtpbmQFGEZFRV9SRURVQ1RJT05fVE9LRU5fVFlQRQQJcmVkdWN0aW9uCQEEaW50QQIJARFuZnRNYW5hZ2VyQWRkcmVzcwAJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdG9rZW5fcGFyYW0FC19hcnRpZmFjdElkBAthZGp1c3RlZEZlZQkBBG11bGQCBQdiYXNlRmVlBQlyZWR1Y3Rpb24JAJQKAgULYWRqdXN0ZWRGZWUGCQACAQIZSW52YWxpZCBhdHRhY2hlZCBhcnRpZmFjdAkAlAoCBQdiYXNlRmVlBwQLYWRqdXN0ZWRGZWUIBQ0kdDA0MjMzNDQyODI5Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA0MjMzNDQyODI5Al8yCQCUCgIFC2FkanVzdGVkRmVlBQxidXJuQXJ0aWZhY3QBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQQZG9HZXRGZWVEaXNjb3VudAkA/AcECQEMbWluZXJBZGRyZXNzAAISY29tcHV0ZUZlZURpc2NvdW50CQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFEGRvR2V0RmVlRGlzY291bnQFEGRvR2V0RmVlRGlzY291bnQEC2ZlZURpc2NvdW50BAckbWF0Y2gwBRBkb0dldEZlZURpc2NvdW50AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECIUludmFsaWQgY29tcHV0ZUZlZURpc2NvdW50IHJlc3VsdAQNJHQwNDMxNzU0MzI0OQkBDmdldEFkanVzdGVkRmVlAgULX2FydGlmYWN0SWQFC2ZlZURpc2NvdW50BAthZGp1c3RlZEZlZQgFDSR0MDQzMTc1NDMyNDkCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDQzMTc1NDMyNDkCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0QXJ0aWZhY3RJZAEBaQQKYXJ0aWZhY3RJZAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEJANgEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEkludmFsaWQgYXJ0aWZhY3RJZAIABQphcnRpZmFjdElkAQ1kaXN0cmlidXRlRmVlAQpfZmVlQW1vdW50BAxmZWVUb1N0YWtlcnMJAQRtdWxkAgUKX2ZlZUFtb3VudAkBE2ZlZVRvU3Rha2Vyc1BlcmNlbnQABApmZWVUb1ZhdWx0CQBlAgUKX2ZlZUFtb3VudAUMZmVlVG9TdGFrZXJzCQCUCgIFDGZlZVRvU3Rha2VycwUKZmVlVG9WYXVsdAEOdXBkYXRlU2V0dGluZ3MPEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUMX2Z1bmRpbmdNb2RlC19vcmFjbGVNb2RlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZVNwcmVhZAUPX21heFByaWNlU3ByZWFkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX21heE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19mZWVUb1N0YWtlcnNQZXJjZW50BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhPcmFjbGVEZWxheQUPX21heE9yYWNsZURlbGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3JvbGxvdmVyRmVlBQxfcm9sbG92ZXJGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfZnVuZGluZ01vZGUFDF9mdW5kaW5nTW9kZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa19vcmFjbGVNb2RlBQtfb3JhY2xlTW9kZQUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAw5faXNOZXdQb3NpdGlvbgdfdHJhZGVyCl9kaXJlY3Rpb24EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uAwUOX2lzTmV3UG9zaXRpb24ED2N1cnJlbnRTZXF1ZW5jZQkBDGxhc3RTZXF1ZW5jZQAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQULcG9zaXRpb25LZXkJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa19zZXF1ZW5jZQkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABBQNuaWwFA25pbAERdXBkYXRlUG9zaXRpb25GZWUEDl9pc05ld1Bvc2l0aW9uB190cmFkZXIKX2RpcmVjdGlvbgRfZmVlBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgMFDl9pc05ld1Bvc2l0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQtwb3NpdGlvbktleQUEX2ZlZQUDbmlsBQNuaWwBDnVwZGF0ZVBvc2l0aW9uBgdfdHJhZGVyBV9zaXplB19tYXJnaW4NX29wZW5Ob3Rpb25hbCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbGF0ZXN0VGltZXN0YW1wBAlkaXJlY3Rpb24JAQxnZXREaXJlY3Rpb24BBQVfc2l6ZQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCWRpcmVjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFC3Bvc2l0aW9uS2V5BQVfc2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgULcG9zaXRpb25LZXkFB19tYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFC3Bvc2l0aW9uS2V5BQ1fb3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQtwb3NpdGlvbktleQUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAULcG9zaXRpb25LZXkFEF9sYXRlc3RUaW1lc3RhbXAFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgMDCQBmAgAABQdfcXRBc3RSBgkAZgIAAAUHX2JzQXN0UgkAAgECIUludmFsaWQgYW1vdW50IHRvIHVwZGF0ZSByZXNlcnZlcwMDCQECIT0CBQdfcXRBc3RSCQEHcXRBc3RSMAAGCQECIT0CBQdfYnNBc3RSCQEHYnNBc3RSMAAJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsBQNuaWwBEHVwZGF0ZUFtbVdlaWdodHMCB19xdEFzdFcHX2JzQXN0VwMDCQECIT0CBQdfcXRBc3RXCQEGcXRBc3RXAAYJAQIhPQIFB19ic0FzdFcJAQZic0FzdFcACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3F1b3RlQXNzZXRXZWlnaHQFB19xdEFzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfYmFzZUFzc2V0V2VpZ2h0BQdfYnNBc3RXBQNuaWwFA25pbAEJdXBkYXRlQW1tCAdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbBdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcAAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEIC0gIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQdfcXRBc3RSBQdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3RvdGFsUG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAUVX29wZW5JbnRlcmVzdE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19vcGVuSW50ZXJlc3RMb25nBRZfdG90YWxMb25nT3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX29wZW5JbnRlcmVzdFNob3J0BRdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAUDbmlsAQ5kZWxldGVQb3NpdGlvbgIHX3RyYWRlcgpfZGlyZWN0aW9uBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQtwb3NpdGlvbktleQUDbmlsAQh3aXRoZHJhdwIIX2FkZHJlc3MHX2Ftb3VudAQHYmFsYW5jZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQBmAgUHX2Ftb3VudAUHYmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICE1VuYWJsZSB0byB3aXRoZHJhdyAJAKQDAQUHX2Ftb3VudAIXIGZyb20gY29udHJhY3QgYmFsYW5jZSAJAKQDAQUHYmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhfYWRkcmVzcwUHX2Ftb3VudAkBCnF1b3RlQXNzZXQABQNuaWwBDXVwZGF0ZUJhbGFuY2UBCF9iYWxhbmNlAwkAZgIAAAUIX2JhbGFuY2UJAAIBAgdCYWxhbmNlAwMJAAACCQEJY2JhbGFuY2UwAAAABgkBAiE9AgkBCWNiYWxhbmNlMAAFCF9iYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrX2JhbGFuY2UFCF9iYWxhbmNlBQNuaWwFA25pbAELdHJhbnNmZXJGZWUBAWkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBDnN0YWtpbmdBZGRyZXNzAAUBaQkBCnF1b3RlQXNzZXQABQNuaWwBDmRvQnVybkFydGlmYWN0Ag1fYnVybkFydGlmYWN0AWkDBQ1fYnVybkFydGlmYWN0CQDMCAIJAQRCdXJuAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQCEEludmFsaWQgYXJ0aWZhY3QAAQUDbmlsBQNuaWwXAWkBBXBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhRJbnZhbGlkIHBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQGBQNuaWwBaQEHdW5wYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIWSW52YWxpZCB1bnBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQHBQNuaWwBaQEMc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhtJbnZhbGlkIHNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BgUDbmlsAWkBDnVuc2V0Q2xvc2VPbmx5AAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIHVuc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkHBQNuaWwBaQEPY2hhbmdlTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAAAIFEV9xdW90ZUFzc2V0QW1vdW50AAAJAAIBAh5JbnZhbGlkIGNoYW5nZUxpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQUYmFzZUFzc2V0QW1vdW50VG9BZGQJAGUCCQEEZGl2ZAIJAQRtdWxkAgULcXRBc3RSQWZ0ZXIFB19xdEFzdFcFBXByaWNlBQdfYnNBc3RSBAtic0FzdFJBZnRlcgkAZAIFB19ic0FzdFIFFGJhc2VBc3NldEFtb3VudFRvQWRkBA0kdDA1MTk3NDUyMTI1CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA1MTk3NDUyMTI1Al8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA1MTk3NDUyMTI1Al8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNTE5NzQ1MjEyNQJfMwQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFDW1hcmdpblRvVmF1bHQAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFDW1hcmdpblRvVmF1bHQFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jaGFuZ2VTZXR0aW5ncxEQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGULX29yYWNsZU1vZGUPX2Jhc2VPcmFjbGVEYXRhEF9xdW90ZU9yYWNsZURhdGEDAwMDAwMDAwMDAwMDAwMDAwMJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGYCAAAFD19tYXhPcmFjbGVEZWxheQYJAGcCAAAFDF9yb2xsb3ZlckZlZQYDCQECIT0CBQxfZnVuZGluZ01vZGUFEUZVTkRJTkdfU1lNTUVUUklDCQECIT0CBQxfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwcGAwkBAiE9AgULX29yYWNsZU1vZGUFDE9SQUNMRV9QTEFJTgkBAiE9AgULX29yYWNsZU1vZGUFCk9SQUNMRV9KSVQHBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgY2hhbmdlU2V0dGluZ3MgcGFyYW1zCQDOCAIJAQ51cGRhdGVTZXR0aW5ncw8FEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5BQxfcm9sbG92ZXJGZWUFDF9mdW5kaW5nTW9kZQULX29yYWNsZU1vZGUJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa19iYXNlT3JhY2xlBQ9fYmFzZU9yYWNsZURhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19xdW90ZU9yYWNsZQUQX3F1b3RlT3JhY2xlRGF0YQUDbmlsAWkBCmluaXRpYWxpemUUB19xdEFzdFIHX2JzQXN0Ug5fZnVuZGluZ1BlcmlvZBBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8EX2ZlZQ9fYmFzZU9yYWNsZURhdGEQX3F1b3RlT3JhY2xlRGF0YQxfY29vcmRpbmF0b3IMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGULX29yYWNsZU1vZGUDAwMDAwMDAwMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkAZwIAAAUQX21heE9wZW5Ob3Rpb25hbAYJAGcCAAAFFF9mZWVUb1N0YWtlcnNQZXJjZW50BgkAZgIFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQxERUNJTUFMX1VOSVQGCQBmAgAABQ9fbWF4T3JhY2xlRGVsYXkGCQBnAgAABQxfcm9sbG92ZXJGZWUGAwkBAiE9AgUMX2Z1bmRpbmdNb2RlBRFGVU5ESU5HX1NZTU1FVFJJQwkBAiE9AgUMX2Z1bmRpbmdNb2RlBRJGVU5ESU5HX0FTWU1NRVRSSUMHBgMJAQIhPQIFC19vcmFjbGVNb2RlBQxPUkFDTEVfUExBSU4JAQIhPQIFC19vcmFjbGVNb2RlBQpPUkFDTEVfSklUBwYJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tCAUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzDwUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkFDF9yb2xsb3ZlckZlZQUMX2Z1bmRpbmdNb2RlBQtfb3JhY2xlTW9kZQkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgkBDWxhc3RUaW1lc3RhbXAABQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa19iYXNlT3JhY2xlBQ9fYmFzZU9yYWNsZURhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19xdW90ZU9yYWNsZQUQX3F1b3RlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQxfY29vcmRpbmF0b3IFA25pbAFpARBpbmNyZWFzZVBvc2l0aW9uBQpfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rDF9wcmljZVVwZGF0ZQQMdXBkYXRlT3JhY2xlCQD8BwQFBHRoaXMCDHVwZGF0ZU9yYWNsZQkAzAgCBQxfcHJpY2VVcGRhdGUFA25pbAUDbmlsAwkAAAIFDHVwZGF0ZU9yYWNsZQUMdXBkYXRlT3JhY2xlBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkBD2dldEFjdHVhbENhbGxlcgEFAWkECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDAwMDAwkBAiE9AgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAQIhPQIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAcGCQBnAgAABQpfcmF3QW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBBQxpc1F1b3RlQXNzZXQGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBBnBhdXNlZAAGCQEJY2xvc2VPbmx5AAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAiNJbnZhbGlkIGluY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNTg2NzU1ODgyNAkBGGdldEZvclRyYWRlcldpdGhBcnRpZmFjdAIFB190cmFkZXIJAQ1nZXRBcnRpZmFjdElkAQUBaQQLYWRqdXN0ZWRGZWUIBQ0kdDA1ODY3NTU4ODI0Al8xBAxidXJuQXJ0aWZhY3QIBQ0kdDA1ODY3NTU4ODI0Al8yBAdfYW1vdW50CQEEZGl2ZAIFCl9yYXdBbW91bnQJAGQCCQEEbXVsZAIFC2FkanVzdGVkRmVlBQlfbGV2ZXJhZ2UFDERFQ0lNQUxfVU5JVAQTZGlzdHJpYnV0ZUZlZUFtb3VudAkAZQIFCl9yYXdBbW91bnQFB19hbW91bnQEDnJlZmVycmVyRmVlQW55CQD8BwQJAQ9yZWZlcnJhbEFkZHJlc3MAAhVhY2NlcHRQYXltZW50V2l0aExpbmsJAMwIAgUHX3RyYWRlcgkAzAgCBQhfcmVmTGluawUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBAlmZWVBbW91bnQJAGUCBRNkaXN0cmlidXRlRmVlQW1vdW50BQtyZWZlcnJlckZlZQQNJHQwNTkzMjA1OTUwMAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNTkzMjA1OTUwMAJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA1OTMyMDU5NTAwAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU5MzIwNTk1MDACXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNTkzMjA1OTUwMAJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA1OTMyMDU5NTAwAl81BA1pc05ld1Bvc2l0aW9uCQAAAgUPb2xkUG9zaXRpb25TaXplAAAED2lzU2FtZURpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQAAAgUKX2RpcmVjdGlvbgUJRElSX1NIT1JUBA5leHBhbmRFeGlzdGluZwMJAQEhAQUNaXNOZXdQb3NpdGlvbgUPaXNTYW1lRGlyZWN0aW9uBwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQNJHQwNTk3ODk2MjkyMgMDBQ1pc05ld1Bvc2l0aW9uBgUOZXhwYW5kRXhpc3RpbmcEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDYwMjk4NjA0NzEJAQlzd2FwSW5wdXQCBQVpc0FkZAUMb3Blbk5vdGlvbmFsBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQIBQ0kdDA2MDI5ODYwNDcxAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjAyOTg2MDQ3MQJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNjAyOTg2MDQ3MQJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDYwMjk4NjA0NzECXzQDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQCAyA8IAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWFtb3VudEJhc2VBc3NldEJvdWdodAQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIJAGQCCQEQb3BlbkludGVyZXN0TG9uZwADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAFDG9wZW5Ob3Rpb25hbAAABBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAGQCCQERb3BlbkludGVyZXN0U2hvcnQAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplBQxvcGVuTm90aW9uYWwAAAQNJHQwNjEwMTc2MTI5MgkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAUHX2Ftb3VudAQMcmVtYWluTWFyZ2luCAUNJHQwNjEwMTc2MTI5MgJfMQQCeDEIBQ0kdDA2MTAxNzYxMjkyAl8yBAJ4MggFDSR0MDYxMDE3NjEyOTICXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjEwMTc2MTI5MgJfNAMJAQEhAQkBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAAIBAhVPdmVyIG1heCBzcHJlYWQgbGltaXQDCQEBIQEJAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAAIBAhZPdmVyIG1heCBvcGVuIG5vdGlvbmFsCQCgCg4FD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUJAQ1sYXN0VGltZXN0YW1wAAUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBkAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBkAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAkAZAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAABRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyBQtyb2xsb3ZlckZlZQQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNjI2MTA2MjczOAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwkApQgBCAUBaQZjYWxsZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDYyNjEwNjI3MzgCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA2MjYxMDYyNzM4Al8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwNTk3ODk2MjkyMgJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDA1OTc4OTYyOTIyAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDU5Nzg5NjI5MjICXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwNTk3ODk2MjkyMgJfNAQUbmV3UG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA1OTc4OTYyOTIyAl81BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA1OTc4OTYyOTIyAl82BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTk3ODk2MjkyMgJfNwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDU5Nzg5NjI5MjICXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA1OTc4OTYyOTIyAl85BA50b3RhbExvbmdBZnRlcggFDSR0MDU5Nzg5NjI5MjIDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA1OTc4OTYyOTIyA18xMQQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA1OTc4OTYyOTIyA18xMgQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTk3ODk2MjkyMgNfMTMEC3JvbGxvdmVyRmVlCAUNJHQwNTk3ODk2MjkyMgNfMTQEDSR0MDYyOTI4NjI5OTkJAQ1kaXN0cmlidXRlRmVlAQkAZAIFCWZlZUFtb3VudAULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDYyOTI4NjI5OTkCXzEECmZlZVRvVmF1bHQIBQ0kdDA2MjkyODYyOTk5Al8yBAVzdGFrZQMJAGcCBQdfYW1vdW50BQtyb2xsb3ZlckZlZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAkAZQIFB19hbW91bnQFC3JvbGxvdmVyRmVlBQNuaWwJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIJAGUCBQtyb2xsb3ZlckZlZQUHX2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQUXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxhdGVzdENQRgUUbmV3UG9zaXRpb25UaW1lc3RhbXAJAR9pbmNyZW1lbnRQb3NpdGlvblNlcXVlbmNlTnVtYmVyAwUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBEXVwZGF0ZVBvc2l0aW9uRmVlBAUNaXNOZXdQb3NpdGlvbgUHX3RyYWRlcgUKX2RpcmVjdGlvbgULYWRqdXN0ZWRGZWUJAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlCQEOZG9CdXJuQXJ0aWZhY3QCBQxidXJuQXJ0aWZhY3QFAWkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRkTWFyZ2luAgpfZGlyZWN0aW9uDF9wcmljZVVwZGF0ZQQMdXBkYXRlT3JhY2xlCQD8BwQFBHRoaXMCDHVwZGF0ZU9yYWNsZQkAzAgCBQxfcHJpY2VVcGRhdGUFA25pbAUDbmlsAwkAAAIFDHVwZGF0ZU9yYWNsZQUMdXBkYXRlT3JhY2xlBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtfYXNzZXRJZFN0cgkA2AQBCQEFdmFsdWUBBQhfYXNzZXRJZAQMaXNRdW90ZUFzc2V0CQAAAgUIX2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAMDAwMDCQEBIQEFDGlzUXVvdGVBc3NldAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24CCQClCAEIBQFpBmNhbGxlcgUKX2RpcmVjdGlvbgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECHEludmFsaWQgYWRkTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDY1MzQxNjU1MjEJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24ED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY1MzQxNjU1MjECXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjUzNDE2NTUyMQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NTM0MTY1NTIxAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY1MzQxNjU1MjECXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjUzNDE2NTUyMQJfNQQFc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEC3JvbGxvdmVyRmVlCQEPY2FsY1JvbGxvdmVyRmVlAgURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uVGltZXN0YW1wBBZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzAwkAZgIFC3JvbGxvdmVyRmVlAAAEDSR0MDY1ODA2NjU4NjUJAQ1kaXN0cmlidXRlRmVlAQULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDY1ODA2NjU4NjUCXzEECmZlZVRvVmF1bHQIBQ0kdDA2NTgwNjY1ODY1Al8yBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQxmZWVUb1N0YWtlcnMFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQpmZWVUb1ZhdWx0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9vbGRQb3NpdGlvblNpemUJAGQCCQBlAgURb2xkUG9zaXRpb25NYXJnaW4FC3JvbGxvdmVyRmVlBQdfYW1vdW50BRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUb2xkUG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQFC3JvbGxvdmVyRmVlBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgMHX2Ftb3VudApfZGlyZWN0aW9uDF9wcmljZVVwZGF0ZQQMdXBkYXRlT3JhY2xlCQD8BwQFBHRoaXMCDHVwZGF0ZU9yYWNsZQkAzAgCBQxfcHJpY2VVcGRhdGUFA25pbAUDbmlsAwkAAAIFDHVwZGF0ZU9yYWNsZQUMdXBkYXRlT3JhY2xlBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEEGVuc3VyZUNhbGxlZE9uY2UJAPwHBAUEdGhpcwIQZW5zdXJlQ2FsbGVkT25jZQUDbmlsBQNuaWwDCQAAAgUQZW5zdXJlQ2FsbGVkT25jZQUQZW5zdXJlQ2FsbGVkT25jZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjczNjY2NzU0NgkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjczNjY2NzU0NgJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2NzM2NjY3NTQ2Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY3MzY2Njc1NDYCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjczNjY2NzU0NgJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2NzM2NjY3NTQ2Al81BA0kdDA2NzU1MjY3ODAxCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQEBLQEFB19hbW91bnQEDHJlbWFpbk1hcmdpbggFDSR0MDY3NTUyNjc4MDECXzEEB2JhZERlYnQIBQ0kdDA2NzU1MjY3ODAxAl8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDY3NTUyNjc4MDECXzMEC3JvbGxvdmVyRmVlCAUNJHQwNjc1NTI2NzgwMQJfNAMJAQIhPQIFB2JhZERlYnQAAAkAAgECHUludmFsaWQgcmVtb3ZlZCBtYXJnaW4gYW1vdW50BAttYXJnaW5SYXRpbwkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JAQ9pbml0TWFyZ2luUmF0aW8ABgkAAgEJAKwCAgkArAICCQCsAgICGVRvbyBtdWNoIG1hcmdpbiByZW1vdmVkOiAJAKQDAQULbWFyZ2luUmF0aW8CAyA8IAkApAMBCQEPaW5pdE1hcmdpblJhdGlvAAQNJHQwNjgxODc2ODI0NgkBDWRpc3RyaWJ1dGVGZWUBBQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjgxODc2ODI0NgJfMQQKZmVlVG9WYXVsdAgFDSR0MDY4MTg3NjgyNDYCXzIEFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMDCQBmAgULcm9sbG92ZXJGZWUAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFCmZlZVRvVmF1bHQFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgkAZAIFB19hbW91bnQFDGZlZVRvU3Rha2VycwUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4FF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD29sZFBvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAACQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGUCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uBQVfc2l6ZQpfZGlyZWN0aW9uFF9taW5RdW90ZUFzc2V0QW1vdW50DF9hZGRUb01hcmdpbgxfcHJpY2VVcGRhdGUEDHVwZGF0ZU9yYWNsZQkA/AcEBQR0aGlzAgx1cGRhdGVPcmFjbGUJAMwIAgUMX3ByaWNlVXBkYXRlBQNuaWwFA25pbAMJAAACBQx1cGRhdGVPcmFjbGUFDHVwZGF0ZU9yYWNsZQQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBA5fdHJhZGVyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFB190cmFkZXICDkludmFsaWQgY2FsbGVyBAtwb3NpdGlvbkZlZQkBDmdldFBvc2l0aW9uRmVlAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgMDAwMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24GCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAGcCAAAFBV9zaXplBgkAZgIAAAUUX21pblF1b3RlQXNzZXRBbW91bnQGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgJfNQQNJHQwNzA1ODE3MTE4NAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbggFB190cmFkZXIFCl9kaXJlY3Rpb24FBV9zaXplBQtwb3NpdGlvbkZlZQUUX21pblF1b3RlQXNzZXRBbW91bnQFDF9hZGRUb01hcmdpbgYGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3MDU4MTcxMTg0Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDcwNTgxNzExODQCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzA1ODE3MTE4NAJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3MDU4MTcxMTg0Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3MDU4MTcxMTg0Al81BAtyZWFsaXplZFBubAgFDSR0MDcwNTgxNzExODQCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzA1ODE3MTE4NAJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwNTgxNzExODQCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDcwNTgxNzExODQCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3MDU4MTcxMTg0A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDcwNTgxNzExODQDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDcwNTgxNzExODQDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3MDU4MTcxMTg0A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3MDU4MTcxMTg0A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzA1ODE3MTE4NANfMTUEC3JlYWxpemVkRmVlCAUNJHQwNzA1ODE3MTE4NANfMTYDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAJAAIBAipJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogYmFkIGRlYnQDCQBnAgUUb2xkUG9zaXRpb25UaW1lc3RhbXAJAQ1sYXN0VGltZXN0YW1wAAkAAgECU0ludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzOiB3YWl0IGF0IGxlYXN0IDEgYmxvY2sgYmVmb3JlIGNsb3NpbmcgdGhlIHBvc2l0aW9uBA5pc1BhcnRpYWxDbG9zZQkBAiE9AgUPbmV3UG9zaXRpb25TaXplAAAEDndpdGhkcmF3QW1vdW50CQBkAgUObWFyZ2luVG9UcmFkZXIFC3JlYWxpemVkRmVlBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUOd2l0aGRyYXdBbW91bnQEDWFtbU5ld0JhbGFuY2UDCQBmAgAABQphbW1CYWxhbmNlAAAFCmFtbUJhbGFuY2UEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIFDndpdGhkcmF3QW1vdW50BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAINYWNjZXB0UGF5bWVudAkAzAgCBQdfdHJhZGVyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAULcmVhbGl6ZWRGZWUFA25pbAMJAAACBQ5yZWZlcnJlckZlZUFueQUOcmVmZXJyZXJGZWVBbnkEC3JlZmVycmVyRmVlBAckbWF0Y2gwBQ5yZWZlcnJlckZlZUFueQMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAhNJbnZhbGlkIHJlZmVycmVyRmVlBA0kdDA3MjE1NjcyMjI5CQENZGlzdHJpYnV0ZUZlZQEJAGUCBQtyZWFsaXplZEZlZQULcmVmZXJyZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDcyMTU2NzIyMjkCXzEECmZlZVRvVmF1bHQIBQ0kdDA3MjE1NjcyMjI5Al8yBAxkZXBvc2l0VmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUMZGVwb3NpdFZhdWx0BQxkZXBvc2l0VmF1bHQECW5vdGlmeUZlZQkA/AcECQEMbWluZXJBZGRyZXNzAAIKbm90aWZ5RmVlcwkAzAgCBQdfdHJhZGVyCQDMCAIFC3JlYWxpemVkRmVlBQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCAwUOaXNQYXJ0aWFsQ2xvc2UJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgkBDWxhc3RUaW1lc3RhbXAACQEOZGVsZXRlUG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyAwkAZgIFDm1hcmdpblRvVHJhZGVyAAAJAQh3aXRoZHJhdwIFDl90cmFkZXJBZGRyZXNzBQ5tYXJnaW5Ub1RyYWRlcgUDbmlsCQENdXBkYXRlQmFsYW5jZQEFDWFtbU5ld0JhbGFuY2UJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUDB190cmFkZXIKX2RpcmVjdGlvbgxfcHJpY2VVcGRhdGUEDHVwZGF0ZU9yYWNsZQkA/AcEBQR0aGlzAgx1cGRhdGVPcmFjbGUJAMwIAgUMX3ByaWNlVXBkYXRlBQNuaWwFA25pbAMJAAACBQx1cGRhdGVPcmFjbGUFDHVwZGF0ZU9yYWNsZQQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA9zcG90TWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UBBZsaXF1aWRhdGlvbk1hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24DBQdfdHJhZGVyBQpfZGlyZWN0aW9uBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFFmxpcXVpZGF0aW9uTWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECE1VuYWJsZSB0byBsaXF1aWRhdGUEFGlzUGFydGlhbExpcXVpZGF0aW9uAwMJAGYCBQ9zcG90TWFyZ2luUmF0aW8JARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkAZgIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAAAAcJAGYCBQxERUNJTUFMX1VOSVQJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAHBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uAl8xBA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDc0ODIyNzUxNDUDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgQPbGlxdWlkYXRpb25TaXplCQEbZ2V0UGFydGlhbExpcXVpZGF0aW9uQW1vdW50AgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplBBBsaXF1aWRhdGlvblJhdGlvCQEEZGl2ZAIJAQNhYnMBBQ9saXF1aWRhdGlvblNpemUFD3Bvc2l0aW9uU2l6ZUFicwkAlAoCBRBsaXF1aWRhdGlvblJhdGlvCQEDYWJzAQUPbGlxdWlkYXRpb25TaXplCQCUCgIAAAUPcG9zaXRpb25TaXplQWJzBBBsaXF1aWRhdGlvblJhdGlvCAUNJHQwNzQ4MjI3NTE0NQJfMQQPbGlxdWlkYXRpb25TaXplCAUNJHQwNzQ4MjI3NTE0NQJfMgQNJHQwNzUxNTE3NTgwNwkBFWludGVybmFsQ2xvc2VQb3NpdGlvbggFB190cmFkZXIFCl9kaXJlY3Rpb24DBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgUPbGlxdWlkYXRpb25TaXplBQ9wb3NpdGlvblNpemVBYnMJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAAABgcGBA9uZXdQb3NpdGlvblNpemUIBQ0kdDA3NTE1MTc1ODA3Al8xBBFuZXdQb3NpdGlvbk1hcmdpbggFDSR0MDc1MTUxNzU4MDcCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNzUxNTE3NTgwNwJfMwQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA3NTE1MTc1ODA3Al80BA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA3NTE1MTc1ODA3Al81BAtyZWFsaXplZFBubAgFDSR0MDc1MTUxNzU4MDcCXzYEDm1hcmdpblRvVHJhZGVyCAUNJHQwNzUxNTE3NTgwNwJfNwQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDc1MTUxNzU4MDcCXzgEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDc1MTUxNzU4MDcCXzkEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA3NTE1MTc1ODA3A18xMAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDc1MTUxNzU4MDcDXzExBA50b3RhbExvbmdBZnRlcggFDSR0MDc1MTUxNzU4MDcDXzEyBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA3NTE1MTc1ODA3A18xMwQadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA3NTE1MTc1ODA3A18xNAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzUxNTE3NTgwNwNfMTUEEmxpcXVpZGF0aW9uUGVuYWx0eQgFDSR0MDc1MTUxNzU4MDcDXzE2BA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQKZmVlVG9WYXVsdAkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA1uZXdBbW1CYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAtsb2NrQmFkRGVidAMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAQLbG9ja0JhZERlYnQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQBkAgUPcG9zaXRpb25CYWREZWJ0BRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0BAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBRJsaXF1aWRhdGlvblBlbmFsdHkFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACB2FkZEZyZWUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQpmZWVUb1ZhdWx0BQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgMFFGlzUGFydGlhbExpcXVpZGF0aW9uCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ9mZWVUb0xpcXVpZGF0b3IJAQ11cGRhdGVCYWxhbmNlAQUNbmV3QW1tQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpwYXlGdW5kaW5nAQxfcHJpY2VVcGRhdGUEDHVwZGF0ZU9yYWNsZQkA/AcEBQR0aGlzAgx1cGRhdGVPcmFjbGUJAMwIAgUMX3ByaWNlVXBkYXRlBQNuaWwFA25pbAMJAAACBQx1cGRhdGVPcmFjbGUFDHVwZGF0ZU9yYWNsZQQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAMDAwkAZgIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBDWxhc3RUaW1lc3RhbXAABgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBCQCsAgIJAKwCAgkArAICAiFJbnZhbGlkIGZ1bmRpbmcgYmxvY2sgdGltZXN0YW1wOiAJAKQDAQkBDWxhc3RUaW1lc3RhbXAAAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDc4MDI1NzgxMDMJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA3ODAyNTc4MTAzAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNzgwMjU3ODEwMwJfMgQOcHJlbWl1bVRvVmF1bHQIBQ0kdDA3ODAyNTc4MTAzAl8zBBNkb1BheUZ1bmRpbmdUb1ZhdWx0AwkAZgIFDnByZW1pdW1Ub1ZhdWx0AAAEE2RvUGF5RnVuZGluZ1RvVmF1bHQJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCCQEBLQEFDnByZW1pdW1Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBRNkb1BheUZ1bmRpbmdUb1ZhdWx0BRNkb1BheUZ1bmRpbmdUb1ZhdWx0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRNkb1BheUZ1bmRpbmdUb1ZhdWx0BRNkb1BheUZ1bmRpbmdUb1ZhdWx0CQENdXBkYXRlRnVuZGluZwUJAGQCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGQCCQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRNsb25nUHJlbWl1bUZyYWN0aW9uCQBkAgkBJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHVwZGF0ZU9yYWNsZQEMX3ByaWNlVXBkYXRlAwkAAAIJAQpvcmFjbGVNb2RlAAUMT1JBQ0xFX1BMQUlOBQNuaWwEDHByaWNlVXBkYXRlcwkAvAkCBQxfcHJpY2VVcGRhdGUCAjo6BApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBBFiYXNlT3JhY2xlQWRkcmVzcwgFCmJhc2VPcmFjbGUCXzEEEmRvVXBkYXRlQmFzZU9yYWNsZQkA/AcEBRFiYXNlT3JhY2xlQWRkcmVzcwIKdXBkYXRlRGF0YQkAzAgCCQCRAwIFDHByaWNlVXBkYXRlcwAABQNuaWwFA25pbAMJAAACBRJkb1VwZGF0ZUJhc2VPcmFjbGUFEmRvVXBkYXRlQmFzZU9yYWNsZQQLcXVvdGVPcmFjbGUJAQ1nZXRPcmFjbGVEYXRhAQUNa19xdW90ZU9yYWNsZQQTZG9VcGRhdGVRdW90ZU9yYWNsZQMJAQlpc0RlZmluZWQBBQtxdW90ZU9yYWNsZQQMcXVvdGVPcmFjbGVWCQEFdmFsdWUBBQtxdW90ZU9yYWNsZQQScXVvdGVPcmFjbGVBZGRyZXNzCAUMcXVvdGVPcmFjbGVWAl8xBBNkb1VwZGF0ZVF1b3RlT3JhY2xlCQD8BwQFEnF1b3RlT3JhY2xlQWRkcmVzcwIKdXBkYXRlRGF0YQkAzAgCCQCRAwIFDHByaWNlVXBkYXRlcwABBQNuaWwFA25pbAMJAAACBRNkb1VwZGF0ZVF1b3RlT3JhY2xlBRNkb1VwZGF0ZVF1b3RlT3JhY2xlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRNkb1VwZGF0ZVF1b3RlT3JhY2xlBRNkb1VwZGF0ZVF1b3RlT3JhY2xlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQAEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQNJHQwNzk5MjA4MDI4NgkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAUHX3F0QXN0UgUHX2JzQXN0UgQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDc5OTIwODAyODYCXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDc5OTIwODAyODYCXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA3OTkyMDgwMjg2Al8zBBBtYXJnaW5Ub1ZhdWx0QWRqAwMJAGYCAAAFDW1hcmdpblRvVmF1bHQJAGYCCQEDYWJzAQUNbWFyZ2luVG9WYXVsdAkBCGNiYWxhbmNlAAcJAQEtAQkBCGNiYWxhbmNlAAUNbWFyZ2luVG9WYXVsdAQNZG9FeGNoYW5nZVBuTAMJAQIhPQIFEG1hcmdpblRvVmF1bHRBZGoAAAQNZG9FeGNoYW5nZVBuTAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIFEG1hcmdpblRvVmF1bHRBZGoFA25pbAUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDWRvRXhjaGFuZ2VQbkwFDWRvRXhjaGFuZ2VQbkwJAM4IAgkBDXVwZGF0ZUJhbGFuY2UBCQBkAgkBCGNiYWxhbmNlAAUQbWFyZ2luVG9WYXVsdEFkagkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQZW5zdXJlQ2FsbGVkT25jZQADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiJJbnZhbGlkIHNhdmVDdXJyZW50VHhJZCBwYXJhbWV0ZXJzBAR0eElkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQhrX2xhc3RUeAIAAwkBAiE9AgUGbGFzdFR4BQR0eElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtfbGFzdFR4BQR0eElkBQNuaWwJAAIBAilDYW4gbm90IGNhbGwgdkFNTSBtZXRob2RzIHR3aWNlIGluIG9uZSB0eAFpAQ9taWdyYXRlUG9zaXRpb24BB190cmFkZXIED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgMDCQEJaXNEZWZpbmVkAQUPcG9zaXRpb25TaXplT3B0CQEJaXNEZWZpbmVkAQkApggBBQdfdHJhZGVyBwQFcFNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQdfdHJhZGVyBAdwTWFyZ2luCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQdfdHJhZGVyBAlwTm90aW9uYWwJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIECXBGcmFjdGlvbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgQKcFRpbWVzdGFtcAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFB190cmFkZXIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBARwRmVlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFB190cmFkZXIJAQNmZWUABAlwU2VxdWVuY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQUHX3RyYWRlcgQKcERpcmVjdGlvbgkBDGdldERpcmVjdGlvbgEFBXBTaXplBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKcERpcmVjdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFB190cmFkZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQtwb3NpdGlvbktleQUFcFNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FC3Bvc2l0aW9uS2V5BQdwTWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQtwb3NpdGlvbktleQUJcE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQtwb3NpdGlvbktleQUJcEZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFC3Bvc2l0aW9uS2V5BQpwVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQtwb3NpdGlvbktleQUEcEZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQtwb3NpdGlvbktleQUJcFNlcXVlbmNlBQNuaWwJAAIBCQCsAgICF05vdGhpbmcgdG8gbWlncmF0ZSBmb3IgBQdfdHJhZGVyAWkBJ3ZpZXdfY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAMHX3RyYWRlcgpfZGlyZWN0aW9uDF9wcmljZVVwZGF0ZQQMdXBkYXRlT3JhY2xlCQD8BwQFBHRoaXMCDHVwZGF0ZU9yYWNsZQkAzAgCBQxfcHJpY2VVcGRhdGUFA25pbAUDbmlsAwkAAAIFDHVwZGF0ZU9yYWNsZQUMdXBkYXRlT3JhY2xlBARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEDSR0MDg0MDgwODQyMTYJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24EDHBvc2l0aW9uU2l6ZQgFDSR0MDg0MDgwODQyMTYCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwODQwODA4NDIxNgJfMgQDcG9uCAUNJHQwODQwODA4NDIxNgJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA4NDA4MDg0MjE2Al80BBFwb3NpdGlvblRpbWVzdGFtcAgFDSR0MDg0MDgwODQyMTYCXzUEDSR0MDg0MjE5ODQzMzIJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAMFB190cmFkZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDg0MjE5ODQzMzICXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA4NDIxOTg0MzMyAl8yBA0kdDA4NDMzNTg0NTU5CQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFEXBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA4NDMzNTg0NTU5Al8xBAdiYWREZWJ0CAUNJHQwODQzMzU4NDU1OQJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA4NDMzNTg0NTU5Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDg0MzM1ODQ1NTkCXzQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFDHJlbWFpbk1hcmdpbgkBAXMBBQ5mdW5kaW5nUGF5bWVudAkBAXMBCQEOZ2V0TWFyZ2luUmF0aW8CBQdfdHJhZGVyBQpfZGlyZWN0aW9uCQEBcwEFDXVucmVhbGl6ZWRQbmwJAQFzAQUHYmFkRGVidAkBAXMBBRBwb3NpdGlvbk5vdGlvbmFsCQEBcwEFC3JvbGxvdmVyRmVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXZpZXdfZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBnJlc3VsdAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwUGX3ByaWNlBQdfcXRBc3RSBQdfYnNBc3RSCQACAQkApAMBCAUGcmVzdWx0Al8zAWkBGHZpZXdfZ2V0VGVybWluYWxBbW1QcmljZQAEDSR0MDg1Mjk0ODUzNzUJARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDg1Mjk0ODUzNzUCXzEEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDg1Mjk0ODUzNzUCXzIEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0VwAJAQRtdWxkAgUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RXAAkAAgEJAKQDAQUFcHJpY2UBaQEPdmlld19nZXRGdW5kaW5nAQxfcHJpY2VVcGRhdGUEDHVwZGF0ZU9yYWNsZQkA/AcEBQR0aGlzAgx1cGRhdGVPcmFjbGUJAMwIAgUMX3ByaWNlVXBkYXRlBQNuaWwFA25pbAMJAAACBQx1cGRhdGVPcmFjbGUFDHVwZGF0ZU9yYWNsZQQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDg2MDI3ODYxMDUJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4NjAyNzg2MTA1Al8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwODYwMjc4NjEwNQJfMgQOcHJlbWl1bVRvVmF1bHQIBQ0kdDA4NjAyNzg2MTA1Al8zBAtsb25nRnVuZGluZwkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UEDHNob3J0RnVuZGluZwkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFC2xvbmdGdW5kaW5nCQEBcwEFDHNob3J0RnVuZGluZwkBAXMBCQEMZ2V0U3BvdFByaWNlAAkBAXMBCQEOZ2V0T3JhY2xlUHJpY2UACQEBcwEFDnByZW1pdW1Ub1ZhdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGNvbXB1dGVTcG90UHJpY2UABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEBnJlc3VsdAkBDGdldFNwb3RQcmljZQAJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEfY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQGcmVzdWx0CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgULX2FydGlmYWN0SWQJAJQKAgUDbmlsBQZyZXN1bHQBAnR4AQZ2ZXJpZnkABA5jb29yZGluYXRvclN0cgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwMJAQlpc0RlZmluZWQBBQ5jb29yZGluYXRvclN0cgQFYWRtaW4JAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUOY29vcmRpbmF0b3JTdHIFD2tfYWRtaW5fYWRkcmVzcwMJAQlpc0RlZmluZWQBBQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVhZG1pbgkArAICCQCsAgIJAKwCAgIHc3RhdHVzXwkApQgBBQR0aGlzAgFfCQDYBAEIBQJ0eAJpZAcJAAIBAi51bmFibGUgdG8gdmVyaWZ5OiBhZG1pbiBub3Qgc2V0IGluIGNvb3JkaW5hdG9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5rVZ7Yw==", "height": 3702800, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6SmYDLLGYdoPZE8kRcuddA94oQiFY8HtLrcb4U2Q2MBL Next: rBBUdbFtUWwgTJBhbVuo9qVcGQXHJnW1nB5DqvxMJGm Diff:
OldNewDifferences
10851085 then true
10861086 else (gt > av))
10871087 then true
1088- else (0 >= gu))
1088+ else (0 > gu))
10891089 then true
10901090 else (0 >= gv))
10911091 then true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_baseOracle"
55
66 let b = "k_quoteOracle"
77
88 let c = "k_balance"
99
1010 let d = "k_sequence"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionSequence"
2121
2222 let j = "k_positionFee"
2323
2424 let k = "k_positionTimestamp"
2525
2626 let l = "k_initialized"
2727
2828 let m = "k_paused"
2929
3030 let n = "k_closeOnly"
3131
3232 let o = "k_fee"
3333
3434 let p = "k_rollover_fee"
3535
3636 let q = "k_fundingPeriod"
3737
3838 let r = "k_initMarginRatio"
3939
4040 let s = "k_mmr"
4141
4242 let t = "k_liquidationFeeRatio"
4343
4444 let u = "k_partLiquidationRatio"
4545
4646 let v = "k_spreadLimit"
4747
4848 let w = "k_maxPriceImpact"
4949
5050 let x = "k_maxPriceSpread"
5151
5252 let y = "k_maxOpenNotional"
5353
5454 let z = "k_feeToStakersPercent"
5555
5656 let A = "k_maxOracleDelay"
5757
5858 let B = "k_fundingMode"
5959
6060 let C = "k_oracleMode"
6161
6262 let D = "k_latestLongPremiumFraction"
6363
6464 let E = "k_latestShortPremiumFraction"
6565
6666 let F = "k_nextFundingBlockMinTimestamp"
6767
6868 let G = "k_longFundingRate"
6969
7070 let H = "k_shortFundingRate"
7171
7272 let I = "k_qtAstR"
7373
7474 let J = "k_bsAstR"
7575
7676 let K = "k_qtAstW"
7777
7878 let L = "k_bsAstW"
7979
8080 let M = "k_totalPositionSize"
8181
8282 let N = "k_totalLongPositionSize"
8383
8484 let O = "k_totalShortPositionSize"
8585
8686 let P = "k_openInterestNotional"
8787
8888 let Q = "k_openInterestShort"
8989
9090 let R = "k_openInterestLong"
9191
9292 let S = "k_lastTx"
9393
9494 let T = "k_coordinatorAddress"
9595
9696 let U = "k_vault_address"
9797
9898 let V = "k_admin_address"
9999
100100 let W = "k_quote_asset"
101101
102102 let X = "k_staking_address"
103103
104104 let Y = "k_miner_address"
105105
106106 let Z = "k_orders_address"
107107
108108 let aa = "k_referral_address"
109109
110110 let ab = "k_nft_manager_address"
111111
112112 func ac (ad,ae) = ((ad + "_") + ae)
113113
114114
115115 func af () = valueOrErrorMessage(addressFromString(getStringValue(this, T)), "Coordinator not set")
116116
117117
118118 func ag () = addressFromString(getStringValue(af(), V))
119119
120120
121121 func ah () = fromBase58String(getStringValue(af(), W))
122122
123123
124124 func ai () = valueOrErrorMessage(addressFromString(getStringValue(af(), X)), "Staking not set")
125125
126126
127127 func aj () = valueOrErrorMessage(addressFromString(getStringValue(af(), U)), "Vault not set")
128128
129129
130130 func ak () = valueOrErrorMessage(addressFromString(getStringValue(af(), Y)), "Miner not set")
131131
132132
133133 func al () = valueOrErrorMessage(addressFromString(getStringValue(af(), Z)), "Orders not set")
134134
135135
136136 func am () = valueOrErrorMessage(addressFromString(getStringValue(af(), aa)), "Referral not set")
137137
138138
139139 func an () = valueOrErrorMessage(addressFromString(getStringValue(af(), ab)), "NFT Manager not set")
140140
141141
142142 let ao = "k_token_param"
143143
144144 let ap = "k_token_type"
145145
146146 let aq = "fee_reduction"
147147
148148 let ar = 1
149149
150150 let as = 2
151151
152152 let at = 1000
153153
154154 let au = 6
155155
156156 let av = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
157157
158158 let aw = (525600 * av)
159159
160160 let ax = (86400 * av)
161161
162162 let ay = 1
163163
164164 let az = 2
165165
166166 let aA = 1
167167
168168 let aB = 2
169169
170170 let aC = 1
171171
172172 let aD = 2
173173
174174 func aE (aF) = (toString(aF) + ",")
175175
176176
177177 func aG (aF,aH) = fraction(aF, av, aH, HALFEVEN)
178178
179179
180180 func aI (aF,aH) = fraction(aF, aH, av, HALFEVEN)
181181
182182
183183 func aJ (aF,aH) = fraction(aF, toBigInt(av), aH, HALFEVEN)
184184
185185
186186 func aK (aF,aH) = fraction(aF, aH, toBigInt(av), HALFEVEN)
187187
188188
189189 func aL (aF) = if ((aF > 0))
190190 then aF
191191 else -(aF)
192192
193193
194194 func aM (aF,aH) = if ((aF >= aH))
195195 then aF
196196 else aH
197197
198198
199199 func aN (aO) = valueOrErrorMessage(getInteger(this, aO), ("no value for " + aO))
200200
201201
202202 func aP (aO,aQ) = valueOrElse(getInteger(this, aO), aQ)
203203
204204
205205 func aR (ae,ad) = {
206206 let aS = valueOrErrorMessage(getString(ae, ad), ("No value for key " + ad))
207207 aS
208208 }
209209
210210
211211 func aT (ae,ad) = {
212212 let aS = valueOrErrorMessage(getInteger(ae, ad), ("No value for key " + ad))
213213 aS
214214 }
215215
216216
217217 func aU () = aN(c)
218218
219219
220220 func aV () = aP(c, 0)
221221
222222
223223 func aW () = aN(o)
224224
225225
226226 func aX () = aN(p)
227227
228228
229229 func aY () = aN(r)
230230
231231
232232 func aZ () = aN(I)
233233
234234
235235 func ba () = aP(I, 0)
236236
237237
238238 func bb () = aN(J)
239239
240240
241241 func bc () = aP(J, 0)
242242
243243
244244 func bd () = aP(K, av)
245245
246246
247247 func be () = aP(L, av)
248248
249249
250250 func bf () = aN(M)
251251
252252
253253 func bg () = aN(P)
254254
255255
256256 func bh () = aN(Q)
257257
258258
259259 func bi () = aN(R)
260260
261261
262262 func bj () = aN(F)
263263
264264
265265 func bk () = aN(q)
266266
267267
268268 func bl () = (bk() * av)
269269
270270
271271 func bm () = (bk() * at)
272272
273273
274274 func bn () = aN(s)
275275
276276
277277 func bo () = aN(t)
278278
279279
280280 func bp () = aN(u)
281281
282282
283283 func bq () = aN(v)
284284
285285
286286 func br () = aN(w)
287287
288288
289289 func bs () = aN(x)
290290
291291
292292 func bt () = aN(y)
293293
294294
295295 func bu () = aN(D)
296296
297297
298298 func bv () = aN(E)
299299
300300
301301 func bw () = aN(O)
302302
303303
304304 func bx () = aN(N)
305305
306306
307307 func by () = aP(d, 0)
308308
309309
310310 func bz () = aN(z)
311311
312312
313313 func bA () = aN(A)
314314
315315
316316 func bB () = aP(B, aA)
317317
318318
319319 func bC () = aP(C, aC)
320320
321321
322322 func bD () = lastBlock.timestamp
323323
324324
325325 func bE (bF) = valueOrElse(getString(al(), "k_sender"), toString(bF.caller))
326326
327327
328328 func bG (bH,bI,bJ) = {
329329 let bK = (bH - bI)
330330 if (if (bJ)
331331 then (0 > bK)
332332 else false)
333333 then throw(((("Invalid margin: " + toString(bH)) + " < ") + toString(bI)))
334334 else if (if (!(bJ))
335335 then (bK >= 0)
336336 else false)
337337 then throw(((("Invalid margin: " + toString(bH)) + " > ") + toString(bI)))
338338 else true
339339 }
340340
341341
342342 func bL (bM) = if ((bM == 0))
343343 then throw("Should not be called with _positionSize == 0")
344344 else if ((bM > 0))
345345 then bu()
346346 else bv()
347347
348348
349349 func bN (bO,bP) = {
350350 let bQ = ((bO + "_") + toString(bP))
351351 let bR = getInteger(this, ac(e, bQ))
352352 let bS = bR
353353 if ($isInstanceOf(bS, "Int"))
354354 then {
355355 let bT = bS
356356 $Tuple5(bT, getIntegerValue(this, ac(f, bQ)), getIntegerValue(this, ac(g, bQ)), getIntegerValue(this, ac(h, bQ)), getIntegerValue(this, ac(k, bQ)))
357357 }
358358 else $Tuple5(0, 0, 0, 0, 0)
359359 }
360360
361361
362362 func bU (bM) = if ((0 > bM))
363363 then as
364364 else ar
365365
366366
367367 func bV (bO,bP) = {
368368 let bQ = ((bO + "_") + toString(bP))
369369 let bW = getInteger(this, ac(j, bQ))
370370 let bS = bW
371371 if ($isInstanceOf(bS, "Int"))
372372 then {
373373 let bX = bS
374374 bX
375375 }
376376 else aW()
377377 }
378378
379379
380380 func bY (bO,bP) = if ((bN(bO, bP)._1 == 0))
381381 then throw("No open position")
382382 else true
383383
384384
385385 func bZ (ca) = {
386386 let cb = getString(this, ca)
387387 if (if (isDefined(cb))
388388 then (value(cb) != "")
389389 else false)
390390 then {
391391 let cc = split(value(cb), ",")
392392 let cd = valueOrErrorMessage(addressFromString(cc[0]), ("Invalid oracle address in: " + value(cb)))
393393 let ce = cc[1]
394394 let cf = cc[2]
395395 let cg = cc[3]
396396 $Tuple4(cd, ce, cf, cg)
397397 }
398398 else unit
399399 }
400400
401401
402402 func ch () = valueOrElse(getBoolean(this, l), false)
403403
404404
405405 func ci () = valueOrElse(getBoolean(this, m), false)
406406
407407
408408 func cj () = valueOrElse(getBoolean(this, n), false)
409409
410410
411411 func ck (cl,cm,cn) = if (cl)
412412 then {
413413 let co = (bb() - cn)
414414 if ((0 >= co))
415415 then throw("Tx lead to base asset reserve <= 0, revert")
416416 else $Tuple3((aZ() + cm), co, (bf() + cn))
417417 }
418418 else {
419419 let cp = (aZ() - cm)
420420 if ((0 >= cp))
421421 then throw("Tx lead to base quote reserve <= 0, revert")
422422 else $Tuple3(cp, (bb() + cn), (bf() - cn))
423423 }
424424
425425
426426 func cq (cr,cs) = {
427427 let ct = toBigInt(cr)
428428 let cu = toBigInt(cs)
429429 aK(ct, cu)
430430 }
431431
432432
433433 func cv (cl,cm) = {
434434 let cr = aZ()
435435 let cs = bb()
436436 let cw = bd()
437437 let cx = be()
438438 let cy = aG(cm, cw)
439439 let aO = cq(cr, cs)
440440 let cz = if (cl)
441441 then (cr + cy)
442442 else (cr - cy)
443443 let cA = toInt(aJ(aO, toBigInt(cz)))
444444 let cB = aL((cA - cs))
445445 let cC = if (cl)
446446 then cB
447447 else -(cB)
448448 let cD = ck(cl, cy, cB)
449449 let cE = cD._1
450450 let cF = cD._2
451451 let cG = cD._3
452452 let cH = aG(aI(cr, cw), aI(cs, cx))
453453 let cI = aG(cm, cB)
454454 let cJ = aL((cH - cI))
455455 let cK = (av - aG(cH, (cH + cJ)))
456456 let cL = br()
457457 if ((cK > cL))
458458 then throw(((((((((((((("Price impact " + toString(cK)) + " > max price impact ") + toString(cL)) + " before quote asset: ") + toString(cr)) + " before base asset: ") + toString(cs)) + " quote asset amount to exchange: ") + toString(cm)) + " price before: ") + toString(cH)) + " marketPrice: ") + toString(cI)))
459459 else $Tuple4(cC, cE, cF, cG)
460460 }
461461
462462
463463 func cM (cN,cO) = {
464464 let cP = ((((bD() - cO) / 1000) / 60) * av)
465465 let cQ = aG(aI(aI(cN, cP), aX()), aw)
466466 cQ
467467 }
468468
469469
470470 func cR (cS,cN,cT,cO,cU) = {
471471 let cV = if ((cS != 0))
472472 then {
473473 let cW = bL(cS)
474474 aI((cW - cT), cS)
475475 }
476476 else 0
477477 let cQ = cM(cN, cO)
478478 let cX = (((cU - cQ) - cV) + cN)
479479 let cY = if ((0 > cX))
480480 then $Tuple2(0, aL(cX))
481481 else $Tuple2(aL(cX), 0)
482482 let cZ = cY._1
483483 let da = cY._2
484484 $Tuple4(cZ, da, cV, cQ)
485485 }
486486
487487
488488 func db (cl,cn,dc,dd,de,df,dg) = {
489489 let cH = aG(aI(dd, de), aI(df, dg))
490490 if ((cn == 0))
491491 then throw("Invalid base asset amount")
492492 else {
493493 let aO = cq(dd, df)
494494 let dh = if (cl)
495495 then (df + cn)
496496 else (df - cn)
497497 let di = toInt(aJ(aO, toBigInt(dh)))
498498 let dj = aL((di - dd))
499499 let dk = aI(dj, de)
500500 let cL = br()
501501 let dl = ck(!(cl), dj, cn)
502502 let cE = dl._1
503503 let cF = dl._2
504504 let cG = dl._3
505505 let cI = aG(dk, cn)
506506 let cJ = aL((cH - cI))
507507 let cK = (av - aG(cH, (cH + cJ)))
508508 if (if ((cK > cL))
509509 then dc
510510 else false)
511511 then throw(((((((((((((("Price impact " + toString(cK)) + " > max price impact ") + toString(cL)) + " before quote asset: ") + toString(dd)) + " before base asset: ") + toString(df)) + " base asset amount to exchange: ") + toString(cn)) + " price before: ") + toString(cH)) + " market price: ") + toString(cI)))
512512 else $Tuple7(dk, cE, cF, cG, (bx() - (if (cl)
513513 then aL(cn)
514514 else 0)), (bw() - (if (!(cl))
515515 then aL(cn)
516516 else 0)), cK)
517517 }
518518 }
519519
520520
521521 func dm (cl,cn,dc) = db(cl, cn, dc, aZ(), bd(), bb(), be())
522522
523523
524524 func dn (do,ce,cf) = {
525525 let dp = valueOrErrorMessage(getInteger(do, ce), ((("Can not get oracle price. Oracle: " + toString(do)) + " key: ") + ce))
526526 if ((cf != ""))
527527 then {
528528 let dq = height
529529 let dr = valueOrErrorMessage(getInteger(do, cf), ((("Can not get oracle block. Oracle: " + toString(do)) + " key: ") + cf))
530530 if (((dq - dr) > bA()))
531531 then throw(((("Oracle stale data. Last oracle block: " + toString(dr)) + " current block: ") + toString(dq)))
532532 else dp
533533 }
534534 else dp
535535 }
536536
537537
538538 func ds () = {
539539 let dt = valueOrErrorMessage(bZ(a), "No base asset oracle data")
540540 let du = dn(dt._1, dt._2, dt._3)
541541 let dv = bZ(b)
542542 let dw = if (isDefined(dv))
543543 then {
544544 let dx = value(dv)
545545 dn(dx._1, dx._2, dx._3)
546546 }
547547 else av
548548 aG(du, dw)
549549 }
550550
551551
552552 func dy () = {
553553 let dt = valueOrErrorMessage(bZ(a), "No base asset oracle data")
554554 let do = dt._1
555555 let cg = dt._4
556556 if ((cg != ""))
557557 then {
558558 let dz = valueOrErrorMessage(getBoolean(do, cg), ((("Can not get oracle is open/closed. Oracle: " + toString(do)) + " key: ") + cg))
559559 !(dz)
560560 }
561561 else false
562562 }
563563
564564
565565 func dA (dB,dd,df,cw,cx) = {
566566 let dC = aG(aI(dd, cw), aI(df, cx))
567567 let dD = aG((dB + dC), (2 * av))
568568 let dA = aG(aL((dB - dC)), dD)
569569 dA
570570 }
571571
572572
573573 func dE (dd,df) = {
574574 let dF = ds()
575575 let cw = bd()
576576 let cx = be()
577577 let dG = dA(dF, aZ(), bb(), cw, cx)
578578 let dH = dA(dF, dd, df, cw, cx)
579579 if (if ((dH > bs()))
580580 then (dH > dG)
581581 else false)
582582 then throw(((("Price spread " + toString(dH)) + " > max price spread ") + toString(bs())))
583583 else true
584584 }
585585
586586
587587 func dI (dJ,dK) = {
588588 let dL = bt()
589589 if ((dJ > dL))
590590 then throw(((("Long open notional " + toString(dJ)) + " > max open notional ") + toString(dL)))
591591 else if ((dK > dL))
592592 then throw(((("Short open notional " + toString(dK)) + " > max open notional ") + toString(dL)))
593593 else true
594594 }
595595
596596
597597 func dM () = {
598598 let dd = aZ()
599599 let df = bb()
600600 let cw = bd()
601601 let cx = be()
602602 aG(aI(dd, cw), aI(df, cx))
603603 }
604604
605605
606606 func dN () = {
607607 let dF = ds()
608608 let dO = dM()
609609 (aG(aL((dF - dO)), dF) > bq())
610610 }
611611
612612
613613 func dP (bM,dQ,dd,de,df,dg) = {
614614 let dR = aL(bM)
615615 let dS = (0 > bM)
616616 let dT = if ((dQ == ay))
617617 then {
618618 let dU = db(!(dS), dR, false, dd, de, df, dg)._1
619619 dU
620620 }
621621 else aI(dR, ds())
622622 dT
623623 }
624624
625625
626626 func dV (bM,dW,dd,de,df,dg,dQ) = if ((bM == 0))
627627 then throw("Invalid position size")
628628 else {
629629 let dS = (0 > bM)
630630 let dT = dP(bM, dQ, dd, de, df, dg)
631631 let dX = if (dS)
632632 then (dW - dT)
633633 else (dT - dW)
634634 $Tuple2(dT, dX)
635635 }
636636
637637
638638 func dY (bO,bP,dQ) = {
639639 let dZ = bN(bO, bP)
640640 let bT = dZ._1
641641 let ea = dZ._2
642642 let eb = dZ._3
643643 let ec = dZ._4
644644 dV(bT, eb, aZ(), bd(), bb(), be(), dQ)
645645 }
646646
647647
648648 func ed (ee,ef,eg) = aG((ee - ef), eg)
649649
650650
651651 func eh (bO,bP,dQ) = {
652652 let ei = bN(bO, bP)
653653 let bT = ei._1
654654 let ea = ei._2
655655 let ej = ei._3
656656 let ek = ei._4
657657 let el = ei._5
658658 let em = dY(bO, bP, dQ)
659659 let dT = em._1
660660 let dX = em._2
661661 let en = cR(bT, ea, ek, el, dX)
662662 let cZ = en._1
663663 let da = en._2
664664 ed(cZ, da, dT)
665665 }
666666
667667
668668 func eo (bO,bP) = eh(bO, bP, ay)
669669
670670
671671 func ep (bO,bM) = {
672672 let eq = aM(bp(), (av - aG(eo(bO, bU(bM)), bn())))
673673 let er = aI(aL(bM), eq)
674674 let es = dm((bM > 0), er, false)
675675 let et = es._1
676676 let cK = es._7
677677 if ((br() > cK))
678678 then er
679679 else aI(aL(bM), bp())
680680 }
681681
682682
683683 func eu (bO,bP,ev,ew,ex,ey,dc,ez) = {
684684 let eA = bN(bO, bP)
685685 let eB = eA._1
686686 let eC = eA._2
687687 let eD = eA._3
688688 let eE = eA._4
689689 let eF = eA._5
690690 let eG = (eB > 0)
691691 let eH = aL(eB)
692692 if (if ((eH >= ev))
693693 then (ev > 0)
694694 else false)
695695 then {
696696 let eI = (eH > ev)
697697 let eJ = dm((eB > 0), ev, dc)
698698 let eK = eJ._1
699699 let cz = eJ._2
700700 let cA = eJ._3
701701 let eL = eJ._4
702702 let eM = if ((eB > 0))
703703 then -(ev)
704704 else ev
705705 let eN = dY(bO, bP, ay)
706706 let eO = eN._1
707707 let dX = eN._2
708708 let eP = aG(aL(eM), eH)
709709 let eQ = aI(dX, eP)
710710 let eR = cR(eB, eC, eE, eF, dX)
711711 let eS = eR._1
712712 let eT = eR._2
713713 let eU = eR._3
714714 let cQ = eR._4
715715 let eV = cR(eB, eC, eE, eF, eQ)._2
716716 let eW = aI(aI(eO, eP), ew)
717717 let eX = (dX - eQ)
718718 let eY = if ((eB > 0))
719719 then ((eO - eK) - eX)
720720 else ((eX + eO) - eK)
721721 let eZ = (eB + eM)
722722 let fa = if ((eZ == 0))
723723 then $Tuple2(0, 0)
724724 else $Tuple2(aL(eY), bL(eZ))
725725 let fb = fa._1
726726 let fc = fa._2
727727 let fd = (eD - fb)
728728 let fe = eh(bO, bP, ay)
729729 let ff = if ((eB > 0))
730730 then (aI((fb + eX), fe) - eX)
731731 else (aI((fb - eX), fe) - eX)
732732 let fg = ((eS - (ff + eX)) - eW)
733733 let fh = if ((0 > fg))
734734 then if (ez)
735735 then 0
736736 else throw("Invalid internalClosePosition params: unable to pay fee")
737737 else fg
738738 let fi = if (ey)
739739 then (ff + fh)
740740 else ff
741741 if (if ((ex != 0))
742742 then (ex > eK)
743743 else false)
744744 then throw(((("Limit error: " + toString(eK)) + " < ") + toString(ex)))
745745 else $Tuple17(eZ, fi, fb, fc, eV, eQ, if (if (ey)
746746 then eI
747747 else false)
748748 then 0
749749 else fh, cz, cA, eL, (bg() - fd), (bx() - (if (eG)
750750 then aL(eM)
751751 else 0)), (bw() - (if (!(eG))
752752 then aL(eM)
753753 else 0)), (bi() - (if (eG)
754754 then fd
755755 else 0)), (bh() - (if (!(eG))
756756 then fd
757757 else 0)), (eW + cQ), eK)
758758 }
759759 else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(ev)) + " max: ") + toString(eH)))
760760 }
761761
762762
763763 func fj () = {
764764 let bM = bf()
765765 if ((bM == 0))
766766 then $Tuple2(aZ(), bb())
767767 else {
768768 let fk = (bM > 0)
769769 let fl = dm(fk, aL(bM), false)
770770 let fm = fl._1
771771 let fn = fl._2
772772 let fo = fl._3
773773 $Tuple2(fn, fo)
774774 }
775775 }
776776
777777
778778 func fp (fq,bf,fr,fs) = {
779779 let ft = toBigInt(fq)
780780 let fu = toBigInt(bf)
781781 let fv = toBigInt(fr)
782782 let fw = toBigInt(fs)
783783 let aO = aK(fv, ft)
784784 let fx = (ft + fu)
785785 let fy = aJ(aO, fx)
786786 let fz = aJ(fy, fx)
787787 let fA = aJ(fw, fz)
788788 toInt(fA)
789789 }
790790
791791
792792 func fB (fC,cr,cs) = {
793793 let bM = bf()
794794 if ((bM == 0))
795795 then {
796796 let fD = aG(aI(fC, cs), cr)
797797 $Tuple3(fD, av, 0)
798798 }
799799 else {
800800 let fk = (bM > 0)
801801 let fm = dm(fk, aL(bM), false)._1
802802 let fD = fp(cs, bM, cr, fC)
803803 let fE = av
804804 let fF = dV(bM, fm, cr, fD, cs, fE, ay)._2
805805 $Tuple3(fD, fE, fF)
806806 }
807807 }
808808
809809
810810 func fG () = {
811811 let fH = ds()
812812 let fI = dM()
813813 let fJ = (fI - fH)
814814 if (if (dy())
815815 then true
816816 else if ((bB() == aA))
817817 then if ((bw() == 0))
818818 then true
819819 else (bx() == 0)
820820 else false)
821821 then $Tuple3(0, 0, 0)
822822 else if ((0 > fJ))
823823 then {
824824 let fK = aG(aI(fJ, bl()), ax)
825825 if ((bB() == aA))
826826 then {
827827 let fL = aG(aI(fK, bw()), bx())
828828 $Tuple3(fK, fL, 0)
829829 }
830830 else {
831831 let fM = aL(aI(fK, bw()))
832832 let fN = aL(aI(fK, bx()))
833833 let fO = (fM - fN)
834834 $Tuple3(fK, fK, fO)
835835 }
836836 }
837837 else {
838838 let fL = aG(aI(fJ, bl()), ax)
839839 if ((bB() == aA))
840840 then {
841841 let fK = aG(aI(fL, bx()), bw())
842842 $Tuple3(fK, fL, 0)
843843 }
844844 else {
845845 let fN = aL(aI(fL, bx()))
846846 let fM = aL(aI(fL, bw()))
847847 let fO = (fN - fM)
848848 $Tuple3(fL, fL, fO)
849849 }
850850 }
851851 }
852852
853853
854854 func fP (fQ,fR) = {
855855 let fS = aW()
856856 let fT = aI(fS, fR)
857857 let fU = if ((fQ != ""))
858858 then {
859859 let fV = aR(an(), ac(ap, fQ))
860860 if ((fV == aq))
861861 then {
862862 let fW = aT(an(), ac(ao, fQ))
863863 let fX = aI(fT, fW)
864864 $Tuple2(fX, true)
865865 }
866866 else throw("Invalid attached artifact")
867867 }
868868 else $Tuple2(fT, false)
869869 let fX = fU._1
870870 let fY = fU._2
871871 $Tuple2(fX, fY)
872872 }
873873
874874
875875 func fZ (bO,fQ) = {
876876 let ga = invoke(ak(), "computeFeeDiscount", [bO], nil)
877877 if ((ga == ga))
878878 then {
879879 let gb = {
880880 let bS = ga
881881 if ($isInstanceOf(bS, "Int"))
882882 then {
883883 let gc = bS
884884 gc
885885 }
886886 else throw("Invalid computeFeeDiscount result")
887887 }
888888 let gd = fP(fQ, gb)
889889 let fX = gd._1
890890 let fY = gd._2
891891 $Tuple2(fX, fY)
892892 }
893893 else throw("Strict value is not equal to itself.")
894894 }
895895
896896
897897 func ge (bF) = {
898898 let gf = if ((size(bF.payments) > 1))
899899 then toBase58String(valueOrErrorMessage(bF.payments[1].assetId, "Invalid artifactId"))
900900 else ""
901901 gf
902902 }
903903
904904
905905 func gg (gh) = {
906906 let gi = aI(gh, bz())
907907 let gj = (gh - gi)
908908 $Tuple2(gi, gj)
909909 }
910910
911911
912912 func gk (gl,gm,gn,go,ew,gp,gq,gr,gs,dL,gt,gu,gv,gw,gx) = [IntegerEntry(r, gl), IntegerEntry(s, gm), IntegerEntry(t, gn), IntegerEntry(q, go), IntegerEntry(o, ew), IntegerEntry(v, gp), IntegerEntry(w, gq), IntegerEntry(u, gr), IntegerEntry(x, gs), IntegerEntry(y, dL), IntegerEntry(z, gt), IntegerEntry(A, gu), IntegerEntry(p, gv), IntegerEntry(B, gw), IntegerEntry(C, gx)]
913913
914914
915915 func gy (gz,gA,gB,gC,gD) = [IntegerEntry(F, gz), IntegerEntry(D, gA), IntegerEntry(E, gB), IntegerEntry(G, gC), IntegerEntry(H, gD)]
916916
917917
918918 func gE (gF,bO,bP) = {
919919 let bQ = ((bO + "_") + toString(bP))
920920 if (gF)
921921 then {
922922 let gG = by()
923923 [IntegerEntry(ac(i, bQ), (gG + 1)), IntegerEntry(d, (gG + 1))]
924924 }
925925 else nil
926926 }
927927
928928
929929 func gH (gF,bO,bP,ew) = {
930930 let bQ = ((bO + "_") + toString(bP))
931931 if (gF)
932932 then [IntegerEntry(ac(j, bQ), ew)]
933933 else nil
934934 }
935935
936936
937937 func gI (bO,ev,gJ,gK,cW,gL) = {
938938 let fk = bU(ev)
939939 let bQ = ((bO + "_") + toString(fk))
940940 [IntegerEntry(ac(e, bQ), ev), IntegerEntry(ac(f, bQ), gJ), IntegerEntry(ac(g, bQ), gK), IntegerEntry(ac(h, bQ), cW), IntegerEntry(ac(k, bQ), gL)]
941941 }
942942
943943
944944 func gM (cr,cs) = if (if ((0 > cr))
945945 then true
946946 else (0 > cs))
947947 then throw("Invalid amount to update reserves")
948948 else if (if ((cr != ba()))
949949 then true
950950 else (cs != bc()))
951951 then [IntegerEntry(I, cr), IntegerEntry(J, cs)]
952952 else nil
953953
954954
955955 func gN (cw,cx) = if (if ((cw != bd()))
956956 then true
957957 else (cx != be()))
958958 then [IntegerEntry(K, cw), IntegerEntry(L, cx)]
959959 else nil
960960
961961
962962 func gO (cr,cs,gP,gQ,gR,gS,gT,gU) = {
963963 let cw = bd()
964964 let cx = be()
965965 if (((gR - gS) != gP))
966966 then throw(((((("Invalid AMM state data: " + toString(gR)) + " - ") + toString(gS)) + " != ") + toString(gP)))
967967 else (gM(cr, cs) ++ [IntegerEntry(M, gP), IntegerEntry(P, gQ), IntegerEntry(N, gR), IntegerEntry(O, gS), IntegerEntry(R, gT), IntegerEntry(Q, gU)])
968968 }
969969
970970
971971 func gV (bO,bP) = {
972972 let bQ = ((bO + "_") + toString(bP))
973973 [DeleteEntry(ac(e, bQ)), DeleteEntry(ac(f, bQ)), DeleteEntry(ac(g, bQ)), DeleteEntry(ac(h, bQ)), DeleteEntry(ac(j, bQ)), DeleteEntry(ac(k, bQ))]
974974 }
975975
976976
977977 func gW (ae,gX) = {
978978 let gY = assetBalance(this, ah())
979979 if ((gX > gY))
980980 then throw(((("Unable to withdraw " + toString(gX)) + " from contract balance ") + toString(gY)))
981981 else [ScriptTransfer(ae, gX, ah())]
982982 }
983983
984984
985985 func gZ (ha) = if ((0 > ha))
986986 then throw("Balance")
987987 else if (if ((aV() == 0))
988988 then true
989989 else (aV() != ha))
990990 then [IntegerEntry(c, ha)]
991991 else nil
992992
993993
994994 func hb (bF) = [ScriptTransfer(ai(), bF, ah())]
995995
996996
997997 func hc (hd,bF) = if (hd)
998998 then [Burn(valueOrErrorMessage(bF.payments[1].assetId, "Invalid artifact"), 1)]
999999 else nil
10001000
10011001
10021002 @Callable(bF)
10031003 func pause () = if ((bF.caller != ag()))
10041004 then throw("Invalid pause params")
10051005 else [BooleanEntry(m, true)]
10061006
10071007
10081008
10091009 @Callable(bF)
10101010 func unpause () = if ((bF.caller != ag()))
10111011 then throw("Invalid unpause params")
10121012 else [BooleanEntry(m, false)]
10131013
10141014
10151015
10161016 @Callable(bF)
10171017 func setCloseOnly () = if ((bF.caller != ag()))
10181018 then throw("Invalid setCloseOnly params")
10191019 else [BooleanEntry(n, true)]
10201020
10211021
10221022
10231023 @Callable(bF)
10241024 func unsetCloseOnly () = if ((bF.caller != ag()))
10251025 then throw("Invalid unsetCloseOnly params")
10261026 else [BooleanEntry(n, false)]
10271027
10281028
10291029
10301030 @Callable(bF)
10311031 func changeLiquidity (cm) = if (if ((bF.caller != ag()))
10321032 then true
10331033 else (cm == 0))
10341034 then throw("Invalid changeLiquidity params")
10351035 else {
10361036 let cr = aZ()
10371037 let cs = bb()
10381038 let cw = bd()
10391039 let cx = be()
10401040 let he = aG(aI(cr, cw), aI(cs, cx))
10411041 let hf = (cr + cm)
10421042 let hg = (aG(aI(hf, cw), he) - cs)
10431043 let hh = (cs + hg)
10441044 let hi = fB(ds(), hf, hh)
10451045 let hj = hi._1
10461046 let hk = hi._2
10471047 let fF = hi._3
10481048 let hl = if ((fF != 0))
10491049 then {
10501050 let hl = invoke(aj(), "exchangeFreeAndLocked", [fF], nil)
10511051 if ((hl == hl))
10521052 then nil
10531053 else throw("Strict value is not equal to itself.")
10541054 }
10551055 else nil
10561056 if ((hl == hl))
10571057 then (gM(hf, hh) ++ gN(hj, hk))
10581058 else throw("Strict value is not equal to itself.")
10591059 }
10601060
10611061
10621062
10631063 @Callable(bF)
10641064 func changeSettings (gl,gm,gn,go,ew,gp,gq,gr,gs,dL,gt,gu,gv,gw,gx,hm,hn) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= go))
10651065 then true
10661066 else (0 >= gl))
10671067 then true
10681068 else (0 >= gm))
10691069 then true
10701070 else (0 >= gn))
10711071 then true
10721072 else (0 >= ew))
10731073 then true
10741074 else (0 >= gp))
10751075 then true
10761076 else (0 >= gq))
10771077 then true
10781078 else (0 >= gr))
10791079 then true
10801080 else (0 >= gs))
10811081 then true
10821082 else (0 >= dL))
10831083 then true
10841084 else (0 >= gt))
10851085 then true
10861086 else (gt > av))
10871087 then true
1088- else (0 >= gu))
1088+ else (0 > gu))
10891089 then true
10901090 else (0 >= gv))
10911091 then true
10921092 else if ((gw != aB))
10931093 then (gw != aA)
10941094 else false)
10951095 then true
10961096 else if ((gx != aC))
10971097 then (gx != aD)
10981098 else false)
10991099 then true
11001100 else !(ch()))
11011101 then true
11021102 else (bF.caller != ag()))
11031103 then throw("Invalid changeSettings params")
11041104 else (gk(gl, gm, gn, go, ew, gp, gq, gr, gs, dL, gt, gu, gv, gw, gx) ++ [StringEntry(a, hm), StringEntry(b, hn)])
11051105
11061106
11071107
11081108 @Callable(bF)
11091109 func initialize (cr,cs,go,gl,gm,gn,ew,hm,hn,ho,gp,gq,gr,gs,dL,gt,gu,gv,gw,gx) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cr))
11101110 then true
11111111 else (0 >= cs))
11121112 then true
11131113 else (0 >= go))
11141114 then true
11151115 else (0 >= gl))
11161116 then true
11171117 else (0 >= gm))
11181118 then true
11191119 else (0 >= gn))
11201120 then true
11211121 else (0 >= ew))
11221122 then true
11231123 else (0 >= gp))
11241124 then true
11251125 else (0 >= gq))
11261126 then true
11271127 else (0 >= gr))
11281128 then true
11291129 else (0 >= gs))
11301130 then true
11311131 else (0 >= dL))
11321132 then true
11331133 else (0 >= gt))
11341134 then true
11351135 else (gt > av))
11361136 then true
11371137 else (0 > gu))
11381138 then true
11391139 else (0 >= gv))
11401140 then true
11411141 else if ((gw != aB))
11421142 then (gw != aA)
11431143 else false)
11441144 then true
11451145 else if ((gx != aC))
11461146 then (gx != aD)
11471147 else false)
11481148 then true
11491149 else ch())
11501150 then true
11511151 else (bF.caller != this))
11521152 then throw("Invalid initialize parameters")
11531153 else ((((gO(cr, cs, 0, 0, 0, 0, 0, 0) ++ gk(gl, gm, gn, go, ew, gp, gq, gr, gs, dL, gt, gu, gv, gw, gx)) ++ gy((bD() + go), 0, 0, 0, 0)) ++ gZ(0)) ++ [BooleanEntry(l, true), StringEntry(a, hm), StringEntry(b, hn), StringEntry(T, toString(addressFromStringValue(ho)))])
11541154
11551155
11561156
11571157 @Callable(bF)
11581158 func increasePosition (bP,hp,hq,hr,hs) = {
11591159 let ht = invoke(this, "updateOracle", [hs], nil)
11601160 if ((ht == ht))
11611161 then {
11621162 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
11631163 if ((hu == hu))
11641164 then {
11651165 let hv = invoke(this, "ensureCalledOnce", nil, nil)
11661166 if ((hv == hv))
11671167 then {
11681168 let bO = bE(bF)
11691169 let hw = bF.payments[0].amount
11701170 let hx = bF.payments[0].assetId
11711171 let hy = toBase58String(value(hx))
11721172 let hz = (hx == ah())
11731173 if (if (if (if (if (if (if (if (if ((bP != ar))
11741174 then (bP != as)
11751175 else false)
11761176 then true
11771177 else (0 >= hw))
11781178 then true
11791179 else !(ch()))
11801180 then true
11811181 else !(hz))
11821182 then true
11831183 else !(bG(aG(av, hp), aY(), true)))
11841184 then true
11851185 else ci())
11861186 then true
11871187 else cj())
11881188 then true
11891189 else dy())
11901190 then throw("Invalid increasePosition parameters")
11911191 else {
11921192 let hA = fZ(bO, ge(bF))
11931193 let fX = hA._1
11941194 let fY = hA._2
11951195 let gX = aG(hw, (aI(fX, hp) + av))
11961196 let hB = (hw - gX)
11971197 let hC = invoke(am(), "acceptPaymentWithLink", [bO, hr], [AttachedPayment(ah(), hB)])
11981198 if ((hC == hC))
11991199 then {
12001200 let hD = {
12011201 let bS = hC
12021202 if ($isInstanceOf(bS, "Int"))
12031203 then {
12041204 let gc = bS
12051205 gc
12061206 }
12071207 else throw("Invalid referrerFee")
12081208 }
12091209 let hE = (hB - hD)
12101210 let hF = bN(bO, bP)
12111211 let eB = hF._1
12121212 let eC = hF._2
12131213 let eD = hF._3
12141214 let eE = hF._4
12151215 let eF = hF._5
12161216 let hG = (eB == 0)
12171217 let hH = if ((eB > 0))
12181218 then (bP == ar)
12191219 else (bP == as)
12201220 let hI = if (!(hG))
12211221 then hH
12221222 else false
12231223 let hJ = (bP == ar)
12241224 let hK = if (if (hG)
12251225 then true
12261226 else hI)
12271227 then {
12281228 let hL = aI(gX, hp)
12291229 let hM = cv(hJ, hL)
12301230 let cC = hM._1
12311231 let cz = hM._2
12321232 let cA = hM._3
12331233 let eL = hM._4
12341234 if (if ((hq != 0))
12351235 then (hq > aL(cC))
12361236 else false)
12371237 then throw(((("Limit error: " + toString(aL(cC))) + " < ") + toString(hq)))
12381238 else {
12391239 let eZ = (eB + cC)
12401240 let hN = (bi() + (if ((eZ > 0))
12411241 then hL
12421242 else 0))
12431243 let hO = (bh() + (if ((0 > eZ))
12441244 then hL
12451245 else 0))
12461246 let hP = cR(eB, eC, eE, eF, gX)
12471247 let cZ = hP._1
12481248 let eT = hP._2
12491249 let eU = hP._3
12501250 let cQ = hP._4
12511251 if (!(dE(cz, cA)))
12521252 then throw("Over max spread limit")
12531253 else if (!(dI(hN, hO)))
12541254 then throw("Over max open notional")
12551255 else $Tuple14(eZ, cZ, (eD + hL), bL(eZ), bD(), cA, cz, eL, (bg() + hL), (bx() + (if ((eZ > 0))
12561256 then aL(cC)
12571257 else 0)), (bw() + (if ((0 > eZ))
12581258 then aL(cC)
12591259 else 0)), hN, hO, cQ)
12601260 }
12611261 }
12621262 else {
12631263 let hL = aI(gX, hp)
12641264 let hQ = dY(toString(bF.caller), bP, ay)
12651265 let eO = hQ._1
12661266 let dX = hQ._2
12671267 if ((eO > hL))
12681268 then throw("Use decreasePosition to decrease position size")
12691269 else throw("Close position first")
12701270 }
12711271 let eZ = hK._1
12721272 let hR = hK._2
12731273 let fb = hK._3
12741274 let hS = hK._4
12751275 let hT = hK._5
12761276 let cA = hK._6
12771277 let cz = hK._7
12781278 let eL = hK._8
12791279 let hU = hK._9
12801280 let hV = hK._10
12811281 let hW = hK._11
12821282 let hN = hK._12
12831283 let hO = hK._13
12841284 let cQ = hK._14
12851285 let hX = gg((hE + cQ))
12861286 let gi = hX._1
12871287 let gj = hX._2
12881288 let hY = if ((gX >= cQ))
12891289 then invoke(aj(), "addLocked", nil, [AttachedPayment(ah(), (gX - cQ))])
12901290 else invoke(aj(), "withdrawLocked", [(cQ - gX)], nil)
12911291 if ((hY == hY))
12921292 then {
12931293 let hZ = invoke(aj(), "addFree", nil, [AttachedPayment(ah(), gj)])
12941294 if ((hZ == hZ))
12951295 then {
12961296 let ia = invoke(ak(), "notifyFees", [bO, hE], nil)
12971297 if ((ia == ia))
12981298 then {
12991299 let ib = invoke(ak(), "notifyNotional", [bO, fb], nil)
13001300 if ((ib == ib))
13011301 then ((((((gI(bO, eZ, hR, fb, hS, hT) ++ gE(hG, bO, bP)) ++ gH(hG, bO, bP, fX)) ++ gO(cz, cA, eL, hU, hV, hW, hN, hO)) ++ hb(gi)) ++ gZ(((aU() + gX) - cQ))) ++ hc(fY, bF))
13021302 else throw("Strict value is not equal to itself.")
13031303 }
13041304 else throw("Strict value is not equal to itself.")
13051305 }
13061306 else throw("Strict value is not equal to itself.")
13071307 }
13081308 else throw("Strict value is not equal to itself.")
13091309 }
13101310 else throw("Strict value is not equal to itself.")
13111311 }
13121312 }
13131313 else throw("Strict value is not equal to itself.")
13141314 }
13151315 else throw("Strict value is not equal to itself.")
13161316 }
13171317 else throw("Strict value is not equal to itself.")
13181318 }
13191319
13201320
13211321
13221322 @Callable(bF)
13231323 func addMargin (bP,hs) = {
13241324 let ht = invoke(this, "updateOracle", [hs], nil)
13251325 if ((ht == ht))
13261326 then {
13271327 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
13281328 if ((hu == hu))
13291329 then {
13301330 let hv = invoke(this, "ensureCalledOnce", nil, nil)
13311331 if ((hv == hv))
13321332 then {
13331333 let bO = toString(bF.caller)
13341334 let gX = bF.payments[0].amount
13351335 let hx = bF.payments[0].assetId
13361336 let hy = toBase58String(value(hx))
13371337 let hz = (hx == ah())
13381338 if (if (if (if (if (!(hz))
13391339 then true
13401340 else !(bY(toString(bF.caller), bP)))
13411341 then true
13421342 else !(ch()))
13431343 then true
13441344 else ci())
13451345 then true
13461346 else dy())
13471347 then throw("Invalid addMargin parameters")
13481348 else {
13491349 let ic = bN(bO, bP)
13501350 let eB = ic._1
13511351 let eC = ic._2
13521352 let eD = ic._3
13531353 let eE = ic._4
13541354 let eF = ic._5
13551355 let hY = invoke(aj(), "addLocked", nil, [AttachedPayment(ah(), gX)])
13561356 if ((hY == hY))
13571357 then {
13581358 let cQ = cM(eC, eF)
13591359 let id = if ((cQ > 0))
13601360 then {
13611361 let ie = gg(cQ)
13621362 let gi = ie._1
13631363 let gj = ie._2
13641364 let if = invoke(aj(), "withdrawLocked", [gi], nil)
13651365 if ((if == if))
13661366 then {
13671367 let ig = invoke(aj(), "exchangeFreeAndLocked", [-(gj)], nil)
13681368 if ((ig == ig))
13691369 then hb(gi)
13701370 else throw("Strict value is not equal to itself.")
13711371 }
13721372 else throw("Strict value is not equal to itself.")
13731373 }
13741374 else nil
13751375 if ((id == id))
13761376 then ((gI(bO, eB, ((eC - cQ) + gX), eD, eE, bD()) ++ gZ(((aU() + gX) - cQ))) ++ id)
13771377 else throw("Strict value is not equal to itself.")
13781378 }
13791379 else throw("Strict value is not equal to itself.")
13801380 }
13811381 }
13821382 else throw("Strict value is not equal to itself.")
13831383 }
13841384 else throw("Strict value is not equal to itself.")
13851385 }
13861386 else throw("Strict value is not equal to itself.")
13871387 }
13881388
13891389
13901390
13911391 @Callable(bF)
13921392 func removeMargin (gX,bP,hs) = {
13931393 let ht = invoke(this, "updateOracle", [hs], nil)
13941394 if ((ht == ht))
13951395 then {
13961396 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
13971397 if ((hu == hu))
13981398 then {
13991399 let hv = invoke(this, "ensureCalledOnce", nil, nil)
14001400 if ((hv == hv))
14011401 then {
14021402 let bO = toString(bF.caller)
14031403 if (if (if (if (if ((0 >= gX))
14041404 then true
14051405 else !(bY(bO, bP)))
14061406 then true
14071407 else !(ch()))
14081408 then true
14091409 else ci())
14101410 then true
14111411 else dy())
14121412 then throw("Invalid removeMargin parameters")
14131413 else {
14141414 let ih = bN(bO, bP)
14151415 let eB = ih._1
14161416 let eC = ih._2
14171417 let eD = ih._3
14181418 let eE = ih._4
14191419 let eF = ih._5
14201420 let ii = cR(eB, eC, eE, eF, -(gX))
14211421 let cZ = ii._1
14221422 let da = ii._2
14231423 let cV = ii._3
14241424 let cQ = ii._4
14251425 if ((da != 0))
14261426 then throw("Invalid removed margin amount")
14271427 else {
14281428 let fe = ed(cZ, da, eD)
14291429 if (!(bG(fe, aY(), true)))
14301430 then throw(((("Too much margin removed: " + toString(fe)) + " < ") + toString(aY())))
14311431 else {
14321432 let ij = gg(cQ)
14331433 let gi = ij._1
14341434 let gj = ij._2
14351435 let id = if ((cQ > 0))
14361436 then {
14371437 let ig = invoke(aj(), "exchangeFreeAndLocked", [-(gj)], nil)
14381438 if ((ig == ig))
14391439 then hb(gi)
14401440 else throw("Strict value is not equal to itself.")
14411441 }
14421442 else nil
14431443 if ((id == id))
14441444 then {
14451445 let if = invoke(aj(), "withdrawLocked", [(gX + gi)], nil)
14461446 if ((if == if))
14471447 then (((gI(bO, eB, cZ, eD, bL(eB), bD()) ++ gW(bF.caller, gX)) ++ gZ(((aU() - gX) - cQ))) ++ id)
14481448 else throw("Strict value is not equal to itself.")
14491449 }
14501450 else throw("Strict value is not equal to itself.")
14511451 }
14521452 }
14531453 }
14541454 }
14551455 else throw("Strict value is not equal to itself.")
14561456 }
14571457 else throw("Strict value is not equal to itself.")
14581458 }
14591459 else throw("Strict value is not equal to itself.")
14601460 }
14611461
14621462
14631463
14641464 @Callable(bF)
14651465 func closePosition (ev,bP,ex,ey,hs) = {
14661466 let ht = invoke(this, "updateOracle", [hs], nil)
14671467 if ((ht == ht))
14681468 then {
14691469 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
14701470 if ((hu == hu))
14711471 then {
14721472 let hv = invoke(this, "ensureCalledOnce", nil, nil)
14731473 if ((hv == hv))
14741474 then {
14751475 let bO = bE(bF)
14761476 let ik = valueOrErrorMessage(addressFromString(bO), "Invalid caller")
14771477 let bX = bV(bO, bP)
14781478 if (if (if (if (if (if (!(bY(bO, bP)))
14791479 then true
14801480 else !(ch()))
14811481 then true
14821482 else ci())
14831483 then true
14841484 else (0 >= ev))
14851485 then true
14861486 else (0 > ex))
14871487 then true
14881488 else dy())
14891489 then throw("Invalid closePosition parameters")
14901490 else {
14911491 let eF = bN(bO, bP)._5
14921492 let il = eu(bO, bP, ev, bX, ex, ey, true, true)
14931493 let eZ = il._1
14941494 let fi = il._2
14951495 let fb = il._3
14961496 let fc = il._4
14971497 let eV = il._5
14981498 let eQ = il._6
14991499 let fh = il._7
15001500 let cz = il._8
15011501 let cA = il._9
15021502 let eL = il._10
15031503 let hU = il._11
15041504 let hV = il._12
15051505 let hW = il._13
15061506 let hN = il._14
15071507 let hO = il._15
15081508 let im = il._16
15091509 if ((eV > 0))
15101510 then throw("Invalid closePosition parameters: bad debt")
15111511 else if ((eF >= bD()))
15121512 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15131513 else {
15141514 let eI = (eZ != 0)
15151515 let in = (fh + im)
15161516 let io = (aU() - in)
15171517 let ip = if ((0 > io))
15181518 then 0
15191519 else io
15201520 let if = invoke(aj(), "withdrawLocked", [in], nil)
15211521 if ((if == if))
15221522 then {
15231523 let hC = invoke(am(), "acceptPayment", [bO], [AttachedPayment(ah(), im)])
15241524 if ((hC == hC))
15251525 then {
15261526 let hD = {
15271527 let bS = hC
15281528 if ($isInstanceOf(bS, "Int"))
15291529 then {
15301530 let gc = bS
15311531 gc
15321532 }
15331533 else throw("Invalid referrerFee")
15341534 }
15351535 let iq = gg((im - hD))
15361536 let gi = iq._1
15371537 let gj = iq._2
15381538 let hZ = invoke(aj(), "addFree", nil, [AttachedPayment(ah(), gj)])
15391539 if ((hZ == hZ))
15401540 then {
15411541 let ia = invoke(ak(), "notifyFees", [bO, im], nil)
15421542 if ((ia == ia))
15431543 then {
15441544 let ib = invoke(ak(), "notifyNotional", [bO, fb], nil)
15451545 if ((ib == ib))
15461546 then (((((if (eI)
15471547 then gI(bO, eZ, fi, fb, fc, bD())
15481548 else gV(bO, bP)) ++ gO(cz, cA, eL, hU, hV, hW, hN, hO)) ++ (if ((fh > 0))
15491549 then gW(ik, fh)
15501550 else nil)) ++ gZ(ip)) ++ hb(gi))
15511551 else throw("Strict value is not equal to itself.")
15521552 }
15531553 else throw("Strict value is not equal to itself.")
15541554 }
15551555 else throw("Strict value is not equal to itself.")
15561556 }
15571557 else throw("Strict value is not equal to itself.")
15581558 }
15591559 else throw("Strict value is not equal to itself.")
15601560 }
15611561 }
15621562 }
15631563 else throw("Strict value is not equal to itself.")
15641564 }
15651565 else throw("Strict value is not equal to itself.")
15661566 }
15671567 else throw("Strict value is not equal to itself.")
15681568 }
15691569
15701570
15711571
15721572 @Callable(bF)
15731573 func liquidate (bO,bP,hs) = {
15741574 let ht = invoke(this, "updateOracle", [hs], nil)
15751575 if ((ht == ht))
15761576 then {
15771577 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
15781578 if ((hu == hu))
15791579 then {
15801580 let ir = eh(bO, bP, ay)
15811581 let is = if (dN())
15821582 then {
15831583 let it = eh(bO, bP, az)
15841584 aM(ir, it)
15851585 }
15861586 else ir
15871587 if (if (if (if (if (!(bG(is, bn(), false)))
15881588 then true
15891589 else !(bY(bO, bP)))
15901590 then true
15911591 else !(ch()))
15921592 then true
15931593 else ci())
15941594 then true
15951595 else dy())
15961596 then throw("Unable to liquidate")
15971597 else {
15981598 let iu = if (if ((ir > bo()))
15991599 then (bp() > 0)
16001600 else false)
16011601 then (av > bp())
16021602 else false
16031603 let eB = bN(bO, bP)._1
16041604 let dR = aL(eB)
16051605 let iv = if (iu)
16061606 then {
16071607 let iw = ep(bO, eB)
16081608 let ix = aG(aL(iw), dR)
16091609 $Tuple2(ix, aL(iw))
16101610 }
16111611 else $Tuple2(0, dR)
16121612 let ix = iv._1
16131613 let iw = iv._2
16141614 let iy = eu(bO, bP, if (iu)
16151615 then iw
16161616 else dR, bo(), 0, true, false, true)
16171617 let eZ = iy._1
16181618 let fi = iy._2
16191619 let fb = iy._3
16201620 let fc = iy._4
16211621 let eV = iy._5
16221622 let eQ = iy._6
16231623 let fh = iy._7
16241624 let cz = iy._8
16251625 let cA = iy._9
16261626 let eL = iy._10
16271627 let hU = iy._11
16281628 let hV = iy._12
16291629 let hW = iy._13
16301630 let hN = iy._14
16311631 let hO = iy._15
16321632 let iz = iy._16
16331633 let iA = (iz / 2)
16341634 let gj = (iz - iA)
16351635 let io = (aU() - iz)
16361636 let iB = if ((0 > io))
16371637 then 0
16381638 else io
16391639 let ig = if ((eV > 0))
16401640 then {
16411641 let ig = invoke(aj(), "exchangeFreeAndLocked", [(eV + iz)], nil)
16421642 if ((ig == ig))
16431643 then nil
16441644 else throw("Strict value is not equal to itself.")
16451645 }
16461646 else nil
16471647 if ((ig == ig))
16481648 then {
16491649 let if = invoke(aj(), "withdrawLocked", [iz], nil)
16501650 if ((if == if))
16511651 then {
16521652 let iC = invoke(aj(), "addFree", nil, [AttachedPayment(ah(), gj)])
16531653 if ((iC == iC))
16541654 then {
16551655 let ib = invoke(ak(), "notifyNotional", [bO, fb], nil)
16561656 if ((ib == ib))
16571657 then ((((if (iu)
16581658 then gI(bO, eZ, fi, fb, fc, bD())
16591659 else gV(bO, bP)) ++ gO(cz, cA, eL, hU, hV, hW, hN, hO)) ++ gW(bF.caller, iA)) ++ gZ(iB))
16601660 else throw("Strict value is not equal to itself.")
16611661 }
16621662 else throw("Strict value is not equal to itself.")
16631663 }
16641664 else throw("Strict value is not equal to itself.")
16651665 }
16661666 else throw("Strict value is not equal to itself.")
16671667 }
16681668 }
16691669 else throw("Strict value is not equal to itself.")
16701670 }
16711671 else throw("Strict value is not equal to itself.")
16721672 }
16731673
16741674
16751675
16761676 @Callable(bF)
16771677 func payFunding (hs) = {
16781678 let ht = invoke(this, "updateOracle", [hs], nil)
16791679 if ((ht == ht))
16801680 then {
16811681 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
16821682 if ((hu == hu))
16831683 then {
16841684 let iD = bj()
16851685 if (if (if ((iD > bD()))
16861686 then true
16871687 else !(ch()))
16881688 then true
16891689 else ci())
16901690 then throw(((("Invalid funding block timestamp: " + toString(bD())) + " < ") + toString(iD)))
16911691 else {
16921692 let fH = ds()
16931693 let iE = fG()
16941694 let fK = iE._1
16951695 let fL = iE._2
16961696 let fO = iE._3
16971697 let iF = if ((fO > 0))
16981698 then {
16991699 let iF = invoke(aj(), "exchangeFreeAndLocked", [-(fO)], nil)
17001700 if ((iF == iF))
17011701 then nil
17021702 else throw("Strict value is not equal to itself.")
17031703 }
17041704 else nil
17051705 if ((iF == iF))
17061706 then gy((iD + bm()), (bu() + fL), (bv() + fK), aG(fL, fH), aG(fK, fH))
17071707 else throw("Strict value is not equal to itself.")
17081708 }
17091709 }
17101710 else throw("Strict value is not equal to itself.")
17111711 }
17121712 else throw("Strict value is not equal to itself.")
17131713 }
17141714
17151715
17161716
17171717 @Callable(bF)
17181718 func updateOracle (hs) = if ((bC() == aC))
17191719 then nil
17201720 else {
17211721 let iG = split_4C(hs, "::")
17221722 let dt = valueOrErrorMessage(bZ(a), "No base asset oracle data")
17231723 let iH = dt._1
17241724 let iI = invoke(iH, "updateData", [iG[0]], nil)
17251725 if ((iI == iI))
17261726 then {
17271727 let dv = bZ(b)
17281728 let iJ = if (isDefined(dv))
17291729 then {
17301730 let dx = value(dv)
17311731 let iK = dx._1
17321732 let iJ = invoke(iK, "updateData", [iG[1]], nil)
17331733 if ((iJ == iJ))
17341734 then nil
17351735 else throw("Strict value is not equal to itself.")
17361736 }
17371737 else nil
17381738 if ((iJ == iJ))
17391739 then nil
17401740 else throw("Strict value is not equal to itself.")
17411741 }
17421742 else throw("Strict value is not equal to itself.")
17431743 }
17441744
17451745
17461746
17471747 @Callable(bF)
17481748 func syncTerminalPriceToOracle () = {
17491749 let cr = aZ()
17501750 let cs = bb()
17511751 let iL = fB(ds(), cr, cs)
17521752 let hj = iL._1
17531753 let hk = iL._2
17541754 let fF = iL._3
17551755 let iM = if (if ((0 > fF))
17561756 then (aL(fF) > aU())
17571757 else false)
17581758 then -(aU())
17591759 else fF
17601760 let hl = if ((iM != 0))
17611761 then {
17621762 let hl = invoke(aj(), "exchangeFreeAndLocked", [iM], nil)
17631763 if ((hl == hl))
17641764 then nil
17651765 else throw("Strict value is not equal to itself.")
17661766 }
17671767 else nil
17681768 if ((hl == hl))
17691769 then (gZ((aU() + iM)) ++ gN(hj, hk))
17701770 else throw("Strict value is not equal to itself.")
17711771 }
17721772
17731773
17741774
17751775 @Callable(bF)
17761776 func ensureCalledOnce () = if ((bF.caller != this))
17771777 then throw("Invalid saveCurrentTxId parameters")
17781778 else {
17791779 let iN = toBase58String(bF.transactionId)
17801780 let iO = valueOrElse(getString(this, S), "")
17811781 if ((iO != iN))
17821782 then [StringEntry(S, iN)]
17831783 else throw("Can not call vAMM methods twice in one tx")
17841784 }
17851785
17861786
17871787
17881788 @Callable(bF)
17891789 func migratePosition (bO) = {
17901790 let bR = getInteger(this, ac(e, bO))
17911791 if (if (isDefined(bR))
17921792 then isDefined(addressFromString(bO))
17931793 else false)
17941794 then {
17951795 let iP = getIntegerValue(this, ac(e, bO))
17961796 let iQ = getIntegerValue(this, ac(f, bO))
17971797 let iR = getIntegerValue(this, ac(g, bO))
17981798 let iS = getIntegerValue(this, ac(h, bO))
17991799 let iT = valueOrElse(getInteger(this, ac(k, bO)), lastBlock.timestamp)
18001800 let iU = valueOrElse(getInteger(this, ac(j, bO)), aW())
18011801 let iV = getIntegerValue(this, ac(i, bO))
18021802 let iW = bU(iP)
18031803 let bQ = ((bO + "_") + toString(iW))
18041804 [DeleteEntry(ac(e, bO)), DeleteEntry(ac(f, bO)), DeleteEntry(ac(g, bO)), DeleteEntry(ac(h, bO)), DeleteEntry(ac(k, bO)), DeleteEntry(ac(j, bO)), DeleteEntry(ac(i, bO)), IntegerEntry(ac(e, bQ), iP), IntegerEntry(ac(f, bQ), iQ), IntegerEntry(ac(g, bQ), iR), IntegerEntry(ac(h, bQ), iS), IntegerEntry(ac(k, bQ), iT), IntegerEntry(ac(j, bQ), iU), IntegerEntry(ac(i, bQ), iV)]
18051805 }
18061806 else throw(("Nothing to migrate for " + bO))
18071807 }
18081808
18091809
18101810
18111811 @Callable(bF)
18121812 func view_calcRemainMarginWithFundingPayment (bO,bP,hs) = {
18131813 let ht = invoke(this, "updateOracle", [hs], nil)
18141814 if ((ht == ht))
18151815 then {
18161816 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
18171817 if ((hu == hu))
18181818 then {
18191819 let iX = bN(bO, bP)
18201820 let bT = iX._1
18211821 let ea = iX._2
18221822 let ej = iX._3
18231823 let ec = iX._4
18241824 let el = iX._5
18251825 let iY = dY(bO, bP, ay)
18261826 let dT = iY._1
18271827 let dX = iY._2
18281828 let iZ = cR(bT, ea, ec, el, dX)
18291829 let cZ = iZ._1
18301830 let da = iZ._2
18311831 let cV = iZ._3
18321832 let cQ = iZ._4
18331833 throw(((((((aE(cZ) + aE(cV)) + aE(eo(bO, bP))) + aE(dX)) + aE(da)) + aE(dT)) + aE(cQ)))
18341834 }
18351835 else throw("Strict value is not equal to itself.")
18361836 }
18371837 else throw("Strict value is not equal to itself.")
18381838 }
18391839
18401840
18411841
18421842 @Callable(bF)
18431843 func view_getPegAdjustCost (ja) = {
18441844 let cr = aZ()
18451845 let cs = bb()
18461846 let fA = fB(ja, cr, cs)
18471847 throw(toString(fA._3))
18481848 }
18491849
18501850
18511851
18521852 @Callable(bF)
18531853 func view_getTerminalAmmPrice () = {
18541854 let jb = fj()
18551855 let fn = jb._1
18561856 let fo = jb._2
18571857 let he = aG(aI(fn, bd()), aI(fo, be()))
18581858 throw(toString(he))
18591859 }
18601860
18611861
18621862
18631863 @Callable(bF)
18641864 func view_getFunding (hs) = {
18651865 let ht = invoke(this, "updateOracle", [hs], nil)
18661866 if ((ht == ht))
18671867 then {
18681868 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
18691869 if ((hu == hu))
18701870 then {
18711871 let fH = ds()
18721872 let jc = fG()
18731873 let fK = jc._1
18741874 let fL = jc._2
18751875 let fO = jc._3
18761876 let jd = aG(fL, fH)
18771877 let je = aG(fK, fH)
18781878 throw(((((aE(jd) + aE(je)) + aE(dM())) + aE(ds())) + aE(fO)))
18791879 }
18801880 else throw("Strict value is not equal to itself.")
18811881 }
18821882 else throw("Strict value is not equal to itself.")
18831883 }
18841884
18851885
18861886
18871887 @Callable(bF)
18881888 func computeSpotPrice () = {
18891889 let hu = invoke(this, "syncTerminalPriceToOracle", nil, nil)
18901890 if ((hu == hu))
18911891 then {
18921892 let fA = dM()
18931893 $Tuple2(nil, fA)
18941894 }
18951895 else throw("Strict value is not equal to itself.")
18961896 }
18971897
18981898
18991899
19001900 @Callable(bF)
19011901 func computeFeeForTraderWithArtifact (bO,fQ) = {
19021902 let fA = fZ(bO, fQ)
19031903 $Tuple2(nil, fA)
19041904 }
19051905
19061906
19071907 @Verifier(jf)
19081908 func jg () = {
19091909 let jh = getString(this, T)
19101910 if (isDefined(jh))
19111911 then {
19121912 let ji = getString(addressFromStringValue(value(jh)), V)
19131913 if (isDefined(ji))
19141914 then valueOrElse(getBoolean(addressFromStringValue(value(ji)), ((("status_" + toString(this)) + "_") + toBase58String(jf.id))), false)
19151915 else throw("unable to verify: admin not set in coordinator")
19161916 }
19171917 else sigVerify(jf.bodyBytes, jf.proofs[0], jf.senderPublicKey)
19181918 }
19191919

github/deemru/w8io/873ac7e 
179.73 ms