New feature 25 "Deterministic Finality and Ride V9" added.#1834
New feature 25 "Deterministic Finality and Ride V9" added.#1834alexeykiselev wants to merge 97 commits into
Conversation
* Added bls signature methods * Added comments * Enforced no duplicates in signatures and public keys * Fixed linter issues * Added pop method * Added public key validation * Bls aggregated sig refactoring (#1838) * BLS package refactoring. Package renamed from blssig to bls. Crypto primitives SecretKey, PublicKey and Signature were added. Public functions Sing and Verify reimplemented to use new primitives. Function to create aggregated signature from multiple Waves secrets keys was removed because it was useful only in tests. PoP functions moved to separate file. * Added test on keys, signature and messages collected from Scala. * Added tests on PoP functions. Fixed review issues. * Fixed linter issues. * Function to create BLS secret key from a Waves secret key moved to bls_test package. Function MustSignatureFromBytes removed. --------- Co-authored-by: Alexey Kiselev <alexey.kiselev@gmail.com>
* Added block finality schemas * Added protobuf schemas * Updated protobuf generated files * Gosec option to exclued generated files added to security workflow. * Set protobuf-schemas submodule to track the branch. Submodule updated to the latest commit. * Generated protobuf code updated to the latest schema. * Protobuf schemas updated and code regenerated. * Tidy go modules. --------- Co-authored-by: Alexey Kiselev <alexey.kiselev@gmail.com>
* Ride version 9 added. New ride function fillList added and tested. * RideV9 functions replaceFirst and replaceAll implemented and tested. * New RideV9 functions for bytes/string conversions with reduced complexity implemented and tested. Old conversion functions refactored to use proper input and output limits. RideV9 functions replaceFirst and replaceAll correct behavior on empty old string implemented. Test naming changed to use fmt.Sprintf to support GoLand interface. * Removed support for 'base16:' prefix for Ride byte conversion functions. Tests modified accordingly. * Added and tested check that Ride V9 scripts is not allowed before activation of DeterministicFinality feature. * Meaningless comment removed. --------- Co-authored-by: Nikolay Eskov <mr.eskov1@yandex.ru>
Proto code regenerated.
* Added delayed finalization * Added an extended log * Finalized height is taken from endorsement to form finalization * WIP: separated pending finalization update and promotion. * Fix some TODO's. * Fixed tests. * Update pkg/state/state.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Nikolay Eskov <mr.eskov1@yandex.ru> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Utility to create CommitToGeneration transactions added. Utility readme file added. Main readme file updated. Make file updated to build new utility. * Review issues fixed.
* Added function to combine FinalizationVoting structures. Test added. * WIP: Generators set handling moved to separate storage entity. Generators balances legacy state hash calculation moved to the entity also. Test updated. * WIP: Generators banning implemented, but not used yet. * WIP: Propagation of new generators API to the call sites in progress. * WIP: Usage of commitments storage replaced with calls to new generators set functions. State API updated. * Small modernize fix. * WIP: More functionality moved out of commitments storage to generators storage. Type of endorser index changed to uint32 for convenience. Type EndorseBlock renamed to BlockEndorsement. Unused or used in tests only functions of commitments removed. Mocks regenerated, tests updated. * Fixed old tests after merge. * WIP: Move finalization code to a separate structure. * WIP: Extracted separate structure to calculate cryptographic message of endorsement. Refactored some BLS functions to hide Circl BLS signature. * Storage finalizations renamed to finality. Removed duplicated code of function LastFinalizedHeight and related. Fixed height issue of generators set initialization. All block finalization checks moved to processBlockFinalization function of finalizer structure. Function calculateLastFinalazedHeight moved to finality structure. Function Validate added to FinalizationVoting structure, it performs basic checks of the structure without accessing the state. Integration test IsolatedFinalitySuite reimplemented to support miner's commitment to generation. * Real minimal generation balance value used to validate sufficiency of balance of generators. Checks on sizes of conflicting and normal endorsements added. Duplicated endorsement cryptographic message serialization functions removed. Check on block generator absence in endorsements added. Addition of block generator balance to total endorsements balance added. Interface function CalculateVotingFinalization removed as unused. * Log messages improvement. * Review issues fixed for generators storage. Function to clean generators before initialization added. Index used to store the reference to block generator. * Other review fixes, mostly comments. * Panic replaces with error for block's generator retrieval. Correct parameters of history storage for banned generators added. * Review fixes. * Logs added. TODO removed. * One more log added.
* WIP: Base itest suite added with support of feature 25 added. * Fixed Docker connection API version. Simple two node finality test added. * Rise level of log message. * Scala node commitment for generation added to finality smoke itest. Ordering of commitments state hash records fixed with new key. * Correct BLS keys generation for Go and Scala miners. Updated genesis.json configuration to support go/scala/no -mining. Enabled log level check added before querying latest finalized block height. * Fixed BLS key generation for non-mining accounts. * Copilot review issues fixed. Function to retrieve and compare finalized blocks heights added and called in test. * Review fixes. Section about env vars added to itest README.
| if err := json.Unmarshal(data, &s); err != nil { | ||
| return fmt.Errorf("MiningType should be a string, got %s", data) | ||
| } |
Check warning
Code scanning / Semgrep OSS
Semgrep Finding: semgrep.rules.if-incorrect-nil-err-return Warning
| if err := json.Unmarshal(data, &s); err != nil { | ||
| return fmt.Errorf("MiningType should be a string, got %s", data) | ||
| } |
Check warning
Code scanning / Semgrep OSS
Semgrep Finding: semgrep.rules.if-inplace-func-incorrect-nil-err-return Warning
* WIP: Base itest suite added with support of feature 25 added. * Fixed Docker connection API version. Simple two node finality test added. * Rise level of log message. * Scala node commitment for generation added to finality smoke itest. Ordering of commitments state hash records fixed with new key. * Correct BLS keys generation for Go and Scala miners. Updated genesis.json configuration to support go/scala/no -mining. Enabled log level check added before querying latest finalized block height. * Fixed BLS key generation for non-mining accounts. * Copilot review issues fixed. Function to retrieve and compare finalized blocks heights added and called in test. * Review fixes. Section about env vars added to itest README. * WIP. Function to burn deposit added. * WIP. TransactionID field added to commitments item. New way of storing block generators. * New way of storing and initializing of generator set implemented. Storing of transaction ID added to commitments. JSON tags added to GeneratorInfo which in turn used in API. * Default values for new setting added. * Fixed height issue then querying generating balance from generator set. Functions complexities updated for RideV9. Test on RideV9 estimation added. Logging improved. * NG activation check added to mined block action of Sync state. * Fixed copilot review issues. * Fixed JSON names for finalized block API. * Duplicate sync peer field removed. Sync peer suspending added on block application error in NG state. Sync peer suspending added on timeout and empty signatures reply in Sync state. * Endorsements validation during block application depend on finalized height from the block itself. FinalizationVoting validation improved. Tests fixed. Endorsement generation for mined blocks simplified. Function BuildLocalEndorsementMessage added to state API. Mocks updated. * Peers suspending replaced with blacklisting. * Switching to Idle state directly after receiving empty signatures from a peer. * Select peer with the maximus score if no peer sync selected. * Review fixes. * GeneratorInfo balance is zeroed on ban of generator. Logging improved. * Correct deposit reset for conflicting endorsers implemented. Reset function extracted and refactored. * Bug of resetting only one deposit fixed. * Moved deposit reset for generators of conflicting endorsements to the proper place. * Deposit reset moved to initial snapshot creation function. * Panic fixed. Test added. * ConflictHeight field added to GeneratorInfo. * Removed NG state reset on block endorsement received. Logging improved. Generators checks added on block endorsement processing. * Conflict endorsement detection extracted from Add function. AddConflict function added to EndorsementPool. * Fixed memoization of endorsement. * Logging improved. String function added to micro-block and some of its fields. * Endorsements pool clean up added after micro-block application. * Unused blockGenerator field and its accessors removed from EndorsementPool and interface. * Forming of partial finalization for conflicting endorsements only added. * Correct finalization voting combining added during micro-block mining. * Fixed panic on string function. * Integration test on conflicting endorsement processing added. Legacy state hash recalculation on banning generator added. * Tagging of processed endorsements added to endorsements pool. Function to remove only processed endorsements added. Tests added. * Log message fixed. * chore(deps): bump alpine from `8ddefa9` to `a2d49ea` (#2117) Bumps alpine from `8ddefa9` to `a2d49ea`. --- updated-dependencies: - dependency-name: alpine dependency-version: '3.24' dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Some review issues fixed. * Endorsement pool reimplemented. Tests rewritten. Integration test on Go-node accept conflicting endorsement added. * Build tag fixed. * Better logging of micro-block mining task. Function Equals added to BlockID type. Test added. * Fixed 'TestWycheProofSecP256Verify' for windows OS. * chore(deps): bump alpine from `a2d49ea` to `28bd5fe` (#2118) Bumps alpine from `a2d49ea` to `28bd5fe`. --- updated-dependencies: - dependency-name: alpine dependency-version: '3.24' dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Implemented 'debug/blacklist' HTTP API method. (#2119) * Implemented 'debug/blacklist' HTTP API method. * Review fixes. * Add 'TestApp_PeersAll'. * Add 'TestNodeApi_PeersBlackList'. * Add more info to log record Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Use RFC UTC time in blacklist reason by API call Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Small changes in 'App.PeersBlackList'. --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Added the error in case of required block is not in cache. * chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 (#2120) Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.3 to 7.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@df4cb1c...9c091bb) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Nikolay Eskov <mr.eskov1@yandex.ru> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
| api := NewNodeAPI(app, nil) | ||
|
|
||
| // Test with body containing IP:port (no leading slash) | ||
| bodyStr := fmt.Sprintf("%s:%d", blacklistedIP, blacklistedPort) |
Check failure
Code scanning / Semgrep OSS
Semgrep Finding: dgryski.semgrep-go.hostport.sprintf-host-port Error test
| } | ||
|
|
||
| func TestRideV9ScalaCompatibility(t *testing.T) { | ||
| code := "CQItCAISAwoBCBIHCgUBAQERGBIHCgUBCAEIARIHCgUBEhERCBIDCgEBEgASABIAJQAHV2F2ZXNJZAIFV0FWRVMAEFB1enpsZUJ1eWJhY2tGZWUAGQARUGF5b3V0RW1wdHlTdGF0dXMAAAAVUGF5b3V0SW5pdGlhdGVkU3RhdHVzAAEAFVBheW91dENvbXBsZXRlZFN0YXR1cwACABJCbG9ja3NCYXRjaE1heFNpemUACgAWUmVjaXBpZW50c0JhdGNoTWF4U2l6ZQBkAAZIZWlnaHQFBmhlaWdodAAFQXJyMTAJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJBQNuaWwAEENvbmZpZ0FkZHJlc3NLZXkCDWNvbmZpZ0FkZHJlc3MADUxhc3RQYXlvdXRLZXkCCmxhc3RQYXlvdXQAE01hc3NUcmFuc2ZlckZlZXNLZXkCEG1hc3NUcmFuc2ZlckZlZXMAD1dhdmVzQ2hhaW5JZEtleQkArAICAghjaGFpbklkXwUHV2F2ZXNJZAAQRGFlbW9uQWRkcmVzc0tleQINZGFlbW9uQWRkcmVzcwASRGFlbW9uUHVibGljS2V5S2V5Ag9kYWVtb25QdWJsaWNLZXkAFE1haW50YWluZXJBZGRyZXNzS2V5AhFtYWludGFpbmVyQWRkcmVzcwAaUHV6emxlQWdncmVnYXRvckFkZHJlc3NLZXkCF3B1enpsZUFnZ3JlZ2F0b3JBZGRyZXNzABdQdXp6bGVCdXliYWNrQWRkcmVzc0tleQIUcHV6emxlQnV5YmFja0FkZHJlc3MAElNldHRpbmdzQWRkcmVzc0tleQIPc2V0dGluZ3NBZGRyZXNzABJTaWduZXJQdWJsaWNLZXlLZXkCD3NpZ25lclB1YmxpY0tleQAZV2F2ZXNEYW9GYWN0b3J5QWRkcmVzc0tleQIWd2F2ZXNEYW9GYWN0b3J5QWRkcmVzcwANQ29uZmlnQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUQQ29uZmlnQWRkcmVzc0tleQAMV2F2ZXNDaGFpbklkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1Db25maWdBZGRyZXNzBQ9XYXZlc0NoYWluSWRLZXkADURhZW1vbkFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDUNvbmZpZ0FkZHJlc3MFEERhZW1vbkFkZHJlc3NLZXkAD0RhZW1vblB1YmxpY0tleQkBEUBleHRyTmF0aXZlKDEwNTIpAgUNQ29uZmlnQWRkcmVzcwUSRGFlbW9uUHVibGljS2V5S2V5ABFNYWludGFpbmVyQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUNQ29uZmlnQWRkcmVzcwUUTWFpbnRhaW5lckFkZHJlc3NLZXkAF1B1enpsZUFnZ3JlZ2F0b3JBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1Db25maWdBZGRyZXNzBRpQdXp6bGVBZ2dyZWdhdG9yQWRkcmVzc0tleQAUUHV6emxlQnV5YmFja0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDUNvbmZpZ0FkZHJlc3MFF1B1enpsZUJ1eWJhY2tBZGRyZXNzS2V5AA9TaWduZXJQdWJsaWNLZXkJAJwIAgUNQ29uZmlnQWRkcmVzcwUSU2lnbmVyUHVibGljS2V5S2V5ABZXYXZlc0Rhb0ZhY3RvcnlBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1Db25maWdBZGRyZXNzBRlXYXZlc0Rhb0ZhY3RvcnlBZGRyZXNzS2V5ARFtYWtlUGF5b3V0RGF0YUtleQEIcGF5b3V0SWQJAKwCAgILcGF5b3V0RGF0YV8JAKQDAQUIcGF5b3V0SWQBE21ha2VQYXlvdXRTdGF0dXNLZXkBCHBheW91dElkCQCsAgICDXBheW91dFN0YXR1c18JAKQDAQUIcGF5b3V0SWQBHm1ha2VQYXlvdXRBZGRpdGlvbmFsUmV3YXJkc0tleQEIcGF5b3V0SWQJAKwCAgIYcGF5b3V0QWRkaXRpb25hbFJld2FyZHNfCQCkAwEFCHBheW91dElkAQ1nZXRMYXN0UGF5b3V0AAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNTGFzdFBheW91dEtleQENZ2V0UGF5b3V0RGF0YQEIcGF5b3V0SWQEDHBheW91dFN0cmluZwkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEW1ha2VQYXlvdXREYXRhS2V5AQUIcGF5b3V0SWQEDnBheW91dERhdGFMaXN0CQC1CQIFDHBheW91dFN0cmluZwIBXwQLc3RhcnRIZWlnaHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5wYXlvdXREYXRhTGlzdAAABAllbmRIZWlnaHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5wYXlvdXREYXRhTGlzdAABCQCUCgIFC3N0YXJ0SGVpZ2h0BQllbmRIZWlnaHQBD2dldFBheW91dFN0YXR1cwEIcGF5b3V0SWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBE21ha2VQYXlvdXRTdGF0dXNLZXkBBQhwYXlvdXRJZAURUGF5b3V0RW1wdHlTdGF0dXMBGmdldFBheW91dEFkZGl0aW9uYWxSZXdhcmRzAQhwYXlvdXRJZAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEebWFrZVBheW91dEFkZGl0aW9uYWxSZXdhcmRzS2V5AQUIcGF5b3V0SWQAAAgBaQEFc2V0dXABDWNvbmZpZ0FkZHJlc3MDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIXUGF5bWVudHMgYXJlIHByb2hpYml0ZWQDCQAAAgkApggBBQ1jb25maWdBZGRyZXNzBQR1bml0CQACAQkArAICAhdJbnZhbGlkIGNvbmZpZ0FkZHJlc3M6IAUNY29uZmlnQWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCBRBDb25maWdBZGRyZXNzS2V5BQ1jb25maWdBZGRyZXNzBQNuaWwBaQEOaW5pdGlhdGVQYXlvdXQFCHBheW91dElkC3N0YXJ0SGVpZ2h0CWVuZEhlaWdodAdhbW91bnRzBmFzc2V0cwMJAQIhPQIIBQFpBmNhbGxlcgUNRGFlbW9uQWRkcmVzcwkAAgECDUFjY2VzcyBkZW5pZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhdQYXltZW50cyBhcmUgcHJvaGliaXRlZAQKbGFzdFBheW91dAkBDWdldExhc3RQYXlvdXQAAwkBAiE9AgUIcGF5b3V0SWQJAGQCBQpsYXN0UGF5b3V0AAEJAAIBCQCsAgIJAKwCAgkArAICAhBXcm9uZyBwYXlvdXRJZDogCQCkAwEFCHBheW91dElkAg0sIHNob3VsZCBiZTogCQCkAwEJAGQCBQpsYXN0UGF5b3V0AAEEEGxhc3RQYXlvdXRTdGF0dXMJAQ9nZXRQYXlvdXRTdGF0dXMBBQpsYXN0UGF5b3V0AwkBAiE9AgUQbGFzdFBheW91dFN0YXR1cwUVUGF5b3V0Q29tcGxldGVkU3RhdHVzCQACAQkArAICCQCsAgICDUxhc3QgcGF5b3V0OiAJAKQDAQUKbGFzdFBheW91dAISIHdhcyBub3QgY29tcGxldGVkBAskdDAzNjA1MzY2OQkBDWdldFBheW91dERhdGEBBQpsYXN0UGF5b3V0BA9sYXN0U3RhcnRIZWlnaHQIBQskdDAzNjA1MzY2OQJfMQQNbGFzdEVuZEhlaWdodAgFCyR0MDM2MDUzNjY5Al8yAwkBAiE9AgULc3RhcnRIZWlnaHQJAGQCBQ1sYXN0RW5kSGVpZ2h0AAEJAAIBCQCsAgIJAKwCAgkArAICAhNXcm9uZyBzdGFydEhlaWdodDogCQCkAwEFC3N0YXJ0SGVpZ2h0Ag0sIHNob3VsZCBiZTogCQCkAwEJAGQCBQ1sYXN0RW5kSGVpZ2h0AAEDCQBmAgULc3RhcnRIZWlnaHQFCWVuZEhlaWdodAkAAgEJAKwCAgkArAICCQCsAgICC2VuZEhlaWdodDogCQCkAwEFCWVuZEhlaWdodAIYIGxlc3MgdGhhbiBzdGFydEhlaWdodDogCQCkAwEFC3N0YXJ0SGVpZ2h0BAthbW91bnRzU2l6ZQkAkAMBBQdhbW91bnRzBAphc3NldHNTaXplCQCQAwEFBmFzc2V0cwMJAQIhPQIFC2Ftb3VudHNTaXplBQphc3NldHNTaXplCQACAQIfV3Jvbmcgc2l6ZSBvZiBhbW91bnRzIG9yIGFzc2V0cwQaYXZhaWxhYmxlV2F2ZXNEYW9McFRvQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUWV2F2ZXNEYW9GYWN0b3J5QWRkcmVzcwkArAICAhElcyVzX19hdmFpbGFibGVfXwkApQgBBQR0aGlzAAAEGndhdmVzRGFvTmV4dEJsb2NrVG9Qcm9jZXNzCQERQGV4dHJOYXRpdmUoMTA1MCkCBRZXYXZlc0Rhb0ZhY3RvcnlBZGRyZXNzAhYlc19fbmV4dEJsb2NrVG9Qcm9jZXNzBA13YXZlc0RscENsYWltAwMJAGYCBRphdmFpbGFibGVXYXZlc0Rhb0xwVG9DbGFpbQAACQBnAgkAZAIFGndhdmVzRGFvTmV4dEJsb2NrVG9Qcm9jZXNzBRJCbG9ja3NCYXRjaE1heFNpemUFBkhlaWdodAcJAPwHBAUWV2F2ZXNEYW9GYWN0b3J5QWRkcmVzcwIHY2xhaW1MUAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUNd2F2ZXNEbHBDbGFpbQUNd2F2ZXNEbHBDbGFpbQQYY3VycmVudEFkZGl0aW9uYWxSZXdhcmRzCQEaZ2V0UGF5b3V0QWRkaXRpb25hbFJld2FyZHMBBQhwYXlvdXRJZAoBCmFzc2V0c0ZvbGQCBWFjY3VtBWluZGV4AwkAZwIFBWluZGV4BQphc3NldHNTaXplBQVhY2N1bQQIYXNzZXRTdHIJAJEDAgUGYXNzZXRzBQVpbmRleAMJAAACCQCaCAIFDUNvbmZpZ0FkZHJlc3MJAKwCAgILYXNzZXRJbmRleF8FCGFzc2V0U3RyBQR1bml0CQACAQkArAICAg9Vbmtub3duIGFzc2V0OiAFCGFzc2V0U3RyBAskdDA0OTU1NTEzNAMJAAACBQhhc3NldFN0cgUHV2F2ZXNJZAkAlAoCBQR1bml0CQBkAgkAkQMCBQdhbW91bnRzBQVpbmRleAUYY3VycmVudEFkZGl0aW9uYWxSZXdhcmRzCQCUCgIJANkEAQUIYXNzZXRTdHIJAJEDAgUHYW1vdW50cwUFaW5kZXgEBWFzc2V0CAULJHQwNDk1NTUxMzQCXzEEBmFtb3VudAgFCyR0MDQ5NTU1MTM0Al8yAwkAZgIAAAUGYW1vdW50CQACAQkArAICCQCsAgICFFdyb25nIGFzc2V0IGFtb3VudDogCQCkAwEFBmFtb3VudAIcLCBzaG91bGQgYmUgcG9zaXRpdmUgb3IgemVybwQUbWFpbnRhaW5lckZlZVBlcmNlbnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDUNvbmZpZ0FkZHJlc3MJAKwCAgIJYXNzZXRGZWVfBQhhc3NldFN0cgQNbWFpbnRhaW5lckZlZQkAawMFBmFtb3VudAUUbWFpbnRhaW5lckZlZVBlcmNlbnQA6AcEEHB1enpsZUJ1eWJhY2tGZWUJAGsDBQZhbW91bnQFEFB1enpsZUJ1eWJhY2tGZWUA6AcEDWxlc3NvcnNBbW91bnQJAGUCCQBlAgUGYW1vdW50BQ1tYWludGFpbmVyRmVlBRBwdXp6bGVCdXliYWNrRmVlCQCUCgIJAM0IAgkAzQgCCAUFYWNjdW0CXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFEU1haW50YWluZXJBZGRyZXNzBQ1tYWludGFpbmVyRmVlBQVhc3NldAkBDlNjcmlwdFRyYW5zZmVyAwUUUHV6emxlQnV5YmFja0FkZHJlc3MFEHB1enpsZUJ1eWJhY2tGZWUFBWFzc2V0CQDNCAIIBQVhY2N1bQJfMgkApAMBBQ1sZXNzb3JzQW1vdW50BAskdDA1ODAwNTg2NwoAAiRsBQVBcnIxMAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmFzc2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoECXRyYW5zZmVycwgFCyR0MDU4MDA1ODY3Al8xBAphbW91bnRLZXlzCAULJHQwNTgwMDU4NjcCXzIEDW5ld1BheW91dERhdGEJALkJAgkAzggCCQDMCAIJAKQDAQULc3RhcnRIZWlnaHQJAMwIAgkApAMBBQllbmRIZWlnaHQFA25pbAUKYW1vdW50S2V5cwIBXwkAzggCBQl0cmFuc2ZlcnMJAMwIAgkBDEludGVnZXJFbnRyeQIFDUxhc3RQYXlvdXRLZXkFCHBheW91dElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFtYWtlUGF5b3V0RGF0YUtleQEFCHBheW91dElkBQ1uZXdQYXlvdXREYXRhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETbWFrZVBheW91dFN0YXR1c0tleQEFCHBheW91dElkBRVQYXlvdXRJbml0aWF0ZWRTdGF0dXMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQRzd2FwBQhwYXlvdXRJZAhzd2FwRnJvbQhhbW91bnRJbgVyb3V0ZQxtaW5Ub1JlY2VpdmUDCQECIT0CCAUBaQZjYWxsZXIFDURhZW1vbkFkZHJlc3MJAAIBAg1BY2Nlc3MgZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIXUGF5bWVudHMgYXJlIHByb2hpYml0ZWQECmxhc3RQYXlvdXQJAQ1nZXRMYXN0UGF5b3V0AAMJAQIhPQIFCmxhc3RQYXlvdXQFCHBheW91dElkCQACAQkArAICCQCsAgIJAKwCAgIQV3JvbmcgcGF5b3V0SWQ6IAkApAMBBQhwYXlvdXRJZAINLCBzaG91bGQgYmU6IAkApAMBBQpsYXN0UGF5b3V0BAxwYXlvdXRTdGF0dXMJAQ9nZXRQYXlvdXRTdGF0dXMBBQhwYXlvdXRJZAMJAQIhPQIFDHBheW91dFN0YXR1cwUVUGF5b3V0SW5pdGlhdGVkU3RhdHVzCQACAQkArAICCQCsAgICFVdyb25nIHBheW91dCBzdGF0dXM6IAkApAMBBQxwYXlvdXRTdGF0dXMCDSwgc2hvdWxkIGJlIDEECyR0MDY4MTg3MDY3AwkAAAIFCHN3YXBGcm9tBQdXYXZlc0lkCQCUCgIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBQR1bml0BAdhc3NldElkCQDZBAEFCHN3YXBGcm9tCQCUCgIJAPAHAgUEdGhpcwUHYXNzZXRJZAUHYXNzZXRJZAQTYmFsYW5jZUluQmVmb3JlU3dhcAgFCyR0MDY4MTg3MDY3Al8xBApzd2FwRnJvbUlkCAULJHQwNjgxODcwNjcCXzIECnN3YXBJbnZva2UJAPwHBAUXUHV6emxlQWdncmVnYXRvckFkZHJlc3MCEHN3YXBXaXRoUmVmZXJyYWwJAMwIAgUFcm91dGUJAMwIAgUMbWluVG9SZWNlaXZlCQDMCAICCnB1enpsZW5vZGUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKc3dhcEZyb21JZAUIYW1vdW50SW4FA25pbAMJAAACBQpzd2FwSW52b2tlBQpzd2FwSW52b2tlBBJiYWxhbmNlSW5BZnRlclN3YXADCQAAAgUIc3dhcEZyb20FB1dhdmVzSWQICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJAQV2YWx1ZQEFCnN3YXBGcm9tSWQEBnJlZnVuZAkAZQIFEmJhbGFuY2VJbkFmdGVyU3dhcAkAZQIFE2JhbGFuY2VJbkJlZm9yZVN3YXAFCGFtb3VudEluAwkAZgIFBnJlZnVuZAAKCQACAQkArAICAhxSb2xsYmFjayBhZ2dyZWdhdG9yIHJlZnVuZDogCQCkAwEFBnJlZnVuZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGRpc3RyaWJ1dGVUb2tlbnMFCHBheW91dElkCnJlY2lwaWVudHMHYW1vdW50cwZhc3NldHMKYXR0YWNobWVudAMJAQIhPQIIBQFpBmNhbGxlcgUNRGFlbW9uQWRkcmVzcwkAAgECDUFjY2VzcyBkZW5pZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhdQYXltZW50cyBhcmUgcHJvaGliaXRlZAQKbGFzdFBheW91dAkBDWdldExhc3RQYXlvdXQAAwkBAiE9AgUKbGFzdFBheW91dAUIcGF5b3V0SWQJAAIBCQCsAgIJAKwCAgkArAICAhBXcm9uZyBwYXlvdXRJZDogCQCkAwEFCHBheW91dElkAg0sIHNob3VsZCBiZTogCQCkAwEFCmxhc3RQYXlvdXQEDHBheW91dFN0YXR1cwkBD2dldFBheW91dFN0YXR1cwEFCHBheW91dElkAwkBAiE9AgUMcGF5b3V0U3RhdHVzBRVQYXlvdXRJbml0aWF0ZWRTdGF0dXMJAAIBCQCsAgIJAKwCAgIVV3JvbmcgcGF5b3V0IHN0YXR1czogCQCkAwEFDHBheW91dFN0YXR1cwINLCBzaG91bGQgYmUgMQQOcmVjaXBpZW50c1NpemUJAJADAQUKcmVjaXBpZW50cwQLYW1vdW50c1NpemUJAJADAQUHYW1vdW50cwQKYXNzZXRzU2l6ZQkAkAMBBQZhc3NldHMDAwkBAiE9AgUOcmVjaXBpZW50c1NpemUFC2Ftb3VudHNTaXplBgkBAiE9AgUOcmVjaXBpZW50c1NpemUFCmFzc2V0c1NpemUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIXV3JvbmcgcmVjaXBpZW50cyBzaXplOiAJAKQDAQUOcmVjaXBpZW50c1NpemUCECwgYW1vdW50cyBzaXplOiAJAKQDAQULYW1vdW50c1NpemUCDywgYXNzZXRzIHNpemU6IAkApAMBBQphc3NldHNTaXplAwkAAAIFDnJlY2lwaWVudHNTaXplAAAJAAIBAiNSZWNpcGllbnRzIGxpc3Qgc2hvdWxkIG5vdCBiZSBlbXB0eQMJAGYCBQ5yZWNpcGllbnRzU2l6ZQUWUmVjaXBpZW50c0JhdGNoTWF4U2l6ZQkAAgEJAKwCAgkArAICCQCsAgICG1Nob3VsZCBiZSBub3QgZ3JlYXRlciB0aGFuIAkApAMBBRZSZWNpcGllbnRzQmF0Y2hNYXhTaXplAhYgcmVjaXBpZW50cywgY3VycmVudDogCQCkAwEFDnJlY2lwaWVudHNTaXplBAltYWdpY0J5dGUJAMoBAgkAmgMBAAEABwQLY2hhaW5JZEJ5dGUJAMoBAgkAmgMBBQxXYXZlc0NoYWluSWQABwQNYWRkcmVzc1ByZWZpeAkAywECBQltYWdpY0J5dGUFC2NoYWluSWRCeXRlCgETc2NyaXB0VHJhbnNmZXJzRm9sZAIFYWNjdW0FaW5kZXgDCQBnAgUFaW5kZXgFDnJlY2lwaWVudHNTaXplBQVhY2N1bQQNcHVibGljS2V5SGFzaAkAkQMCBQpyZWNpcGllbnRzBQVpbmRleAQLYWRkcmVzc0RhdGEJAMsBAgUNYWRkcmVzc1ByZWZpeAUNcHVibGljS2V5SGFzaAQPYWRkcmVzc0NoZWNrc3VtCQDJAQIJAPUDAQkA9gMBBQthZGRyZXNzRGF0YQAEBAlyZWNpcGllbnQJAQdBZGRyZXNzAQkAywECBQthZGRyZXNzRGF0YQUPYWRkcmVzc0NoZWNrc3VtBAZhbW91bnQJAJEDAgUHYW1vdW50cwUFaW5kZXgECmFzc2V0SW5kZXgJAJEDAgUGYXNzZXRzBQVpbmRleAQHYXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTIpAgUNQ29uZmlnQWRkcmVzcwkArAICAghhc3NldElkXwkApAMBBQphc3NldEluZGV4BAVhc3NldAMJAAACBQdhc3NldElkAQAFBHVuaXQFB2Fzc2V0SWQJAM0IAgUFYWNjdW0JAQ5TY3JpcHRUcmFuc2ZlcgMFCXJlY2lwaWVudAUGYW1vdW50BQVhc3NldAQHaW5kZXhlcwkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAkAzAgCABUJAMwIAgAWCQDMCAIAFwkAzAgCABgJAMwIAgAZCQDMCAIAGgkAzAgCABsJAMwIAgAcCQDMCAIAHQkAzAgCAB4JAMwIAgAfCQDMCAIAIAkAzAgCACEJAMwIAgAiCQDMCAIAIwkAzAgCACQJAMwIAgAlCQDMCAIAJgkAzAgCACcJAMwIAgAoCQDMCAIAKQkAzAgCACoJAMwIAgArCQDMCAIALAkAzAgCAC0JAMwIAgAuCQDMCAIALwkAzAgCADAJAMwIAgAxCQDMCAIAMgkAzAgCADMJAMwIAgA0CQDMCAIANQkAzAgCADYJAMwIAgA3CQDMCAIAOAkAzAgCADkJAMwIAgA6CQDMCAIAOwkAzAgCADwJAMwIAgA9CQDMCAIAPgkAzAgCAD8JAMwIAgBACQDMCAIAQQkAzAgCAEIJAMwIAgBDCQDMCAIARAkAzAgCAEUJAMwIAgBGCQDMCAIARwkAzAgCAEgJAMwIAgBJCQDMCAIASgkAzAgCAEsJAMwIAgBMCQDMCAIATQkAzAgCAE4JAMwIAgBPCQDMCAIAUAkAzAgCAFEJAMwIAgBSCQDMCAIAUwkAzAgCAFQJAMwIAgBVCQDMCAIAVgkAzAgCAFcJAMwIAgBYCQDMCAIAWQkAzAgCAFoJAMwIAgBbCQDMCAIAXAkAzAgCAF0JAMwIAgBeCQDMCAIAXwkAzAgCAGAJAMwIAgBhCQDMCAIAYgkAzAgCAGMFA25pbAoAAiRsBQdpbmRleGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARNzY3JpcHRUcmFuc2ZlcnNGb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAFpAQ5maW5hbGl6ZVBheW91dAEIcGF5b3V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDURhZW1vbkFkZHJlc3MJAAIBAg1BY2Nlc3MgZGVuaWVkBApsYXN0UGF5b3V0CQENZ2V0TGFzdFBheW91dAADCQECIT0CBQpsYXN0UGF5b3V0BQhwYXlvdXRJZAkAAgEJAKwCAgkArAICCQCsAgICEFdyb25nIHBheW91dElkOiAJAKQDAQUIcGF5b3V0SWQCDSwgc2hvdWxkIGJlOiAJAKQDAQUKbGFzdFBheW91dAQMcGF5b3V0U3RhdHVzCQEPZ2V0UGF5b3V0U3RhdHVzAQUKbGFzdFBheW91dAMJAQIhPQIFDHBheW91dFN0YXR1cwUVUGF5b3V0SW5pdGlhdGVkU3RhdHVzCQACAQkArAICCQCsAgICFVdyb25nIHBheW91dCBzdGF0dXM6IAkApAMBBQxwYXlvdXRTdGF0dXMCDiwgc2hvdWxkIGJlOiAxCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETbWFrZVBheW91dFN0YXR1c0tleQEFCmxhc3RQYXlvdXQFFVBheW91dENvbXBsZXRlZFN0YXR1cwUDbmlsAWkBFGFkZEFkZGl0aW9uYWxSZXdhcmRzAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECJ0F0IGxlYXN0IG9uZSBwYXltZW50IHNob3VsZCBiZSBhdHRhY2hlZAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAkAAgECGk9ubHkgd2F2ZXMgY2FuIGJlIGF0dGFjaGVkBApsYXN0UGF5b3V0CQENZ2V0TGFzdFBheW91dAAEEGxhc3RQYXlvdXRTdGF0dXMJAQ9nZXRQYXlvdXRTdGF0dXMBBQpsYXN0UGF5b3V0AwkBAiE9AgUQbGFzdFBheW91dFN0YXR1cwUVUGF5b3V0Q29tcGxldGVkU3RhdHVzCQACAQkArAICCQCsAgICDUxhc3QgcGF5b3V0OiAJAKQDAQUKbGFzdFBheW91dAISIHdhcyBub3QgY29tcGxldGVkBAxuZXh0UGF5b3V0SWQJAGQCBQpsYXN0UGF5b3V0AAEEGGN1cnJlbnRBZGRpdGlvbmFsUmV3YXJkcwkBGmdldFBheW91dEFkZGl0aW9uYWxSZXdhcmRzAQUMbmV4dFBheW91dElkBBRuZXdBZGRpdGlvbmFsUmV3YXJkcwkAZAIFGGN1cnJlbnRBZGRpdGlvbmFsUmV3YXJkcwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5tYWtlUGF5b3V0QWRkaXRpb25hbFJld2FyZHNLZXkBBQxuZXh0UGF5b3V0SWQFFG5ld0FkZGl0aW9uYWxSZXdhcmRzBQNuaWwBaQETYWRkTWFzc1RyYW5zZmVyRmVlcwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAidBdCBsZWFzdCBvbmUgcGF5bWVudCBzaG91bGQgYmUgYXR0YWNoZWQDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFBHVuaXQJAAIBAhpPbmx5IHdhdmVzIGNhbiBiZSBhdHRhY2hlZAQXY3VycmVudE1hc3NUcmFuc2ZlckZlZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUTTWFzc1RyYW5zZmVyRmVlc0tleQAABBNuZXdNYXNzVHJhbnNmZXJGZWVzCQBkAgUXY3VycmVudE1hc3NUcmFuc2ZlckZlZXMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNNYXNzVHJhbnNmZXJGZWVzS2V5BRNuZXdNYXNzVHJhbnNmZXJGZWVzBQNuaWwBaQEYd2l0aGRyYXdNYXNzVHJhbnNmZXJGZWVzAAMJAQIhPQIIBQFpBmNhbGxlcgURTWFpbnRhaW5lckFkZHJlc3MJAAIBAg1BY2Nlc3MgZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIXUGF5bWVudHMgYXJlIHByb2hpYml0ZWQEF2N1cnJlbnRNYXNzVHJhbnNmZXJGZWVzCQELdmFsdWVPckVsc2UCCQCfCAEFE01hc3NUcmFuc2ZlckZlZXNLZXkAAAMJAAACBRdjdXJyZW50TWFzc1RyYW5zZmVyRmVlcwAACQACAQITTm90aGluZyB0byB3aXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgUTTWFzc1RyYW5zZmVyRmVlc0tleQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEU1haW50YWluZXJBZGRyZXNzBRdjdXJyZW50TWFzc1RyYW5zZmVyRmVlcwUEdW5pdAUDbmlsAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24EBm1hc3NUeAUHJG1hdGNoMAQQY29uZmlnQWRkcmVzc1N0cgkAnQgCBQR0aGlzBRBDb25maWdBZGRyZXNzS2V5BA1jb25maWdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBRBjb25maWdBZGRyZXNzU3RyBAlwdWJsaWNLZXkDCQEJaXNEZWZpbmVkAQUQY29uZmlnQWRkcmVzc1N0cgkBC3ZhbHVlT3JFbHNlAgkAnAgCBQ1jb25maWdBZGRyZXNzBRJEYWVtb25QdWJsaWNLZXlLZXkIBQJ0eA9zZW5kZXJQdWJsaWNLZXkIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAMQTAwgFBm1hc3NUeAlib2R5Qnl0ZXMJAJEDAggFBm1hc3NUeAZwcm9vZnMAAAUJcHVibGljS2V5AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAhpbnZva2VUeAUHJG1hdGNoMAQQY29uZmlnQWRkcmVzc1N0cgkAnQgCBQR0aGlzBRBDb25maWdBZGRyZXNzS2V5BA1jb25maWdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBRBjb25maWdBZGRyZXNzU3RyBAp1bml0c0NoYWluCQCdCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgIPdW5pdHNDaGFpbk5hbWVfCQClCAEKAAFACAUIaW52b2tlVHgEZEFwcAMJAAECBQFAAgdBZGRyZXNzBQFACQACAQkArAICCQADAQUBQAIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQWRkcmVzcwQPc2lnbmVyUHVibGljS2V5CQELdmFsdWVPckVsc2UCCQCcCAIFDWNvbmZpZ0FkZHJlc3MFElNpZ25lclB1YmxpY0tleUtleQgFAnR4D3NlbmRlclB1YmxpY0tleQQJcHVibGljS2V5AwkBCWlzRGVmaW5lZAEFEGNvbmZpZ0FkZHJlc3NTdHIDCQEJaXNEZWZpbmVkAQUKdW5pdHNDaGFpbggFAnR4D3NlbmRlclB1YmxpY0tleQUPc2lnbmVyUHVibGljS2V5CAUCdHgPc2VuZGVyUHVibGljS2V5CQDEEwMIBQhpbnZva2VUeAlib2R5Qnl0ZXMJAJEDAggFCGludm9rZVR4BnByb29mcwAABQlwdWJsaWNLZXkDCQABAgUHJG1hdGNoMAIdQ29tbWl0VG9HZW5lcmF0aW9uVHJhbnNhY3Rpb24ECGNvbW1pdFR4BQckbWF0Y2gwCQDEEwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5BBBjb25maWdBZGRyZXNzU3RyCQCdCAIFBHRoaXMFEENvbmZpZ0FkZHJlc3NLZXkEDWNvbmZpZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFEGNvbmZpZ0FkZHJlc3NTdHIECXB1YmxpY0tleQMJAQlpc0RlZmluZWQBBRBjb25maWdBZGRyZXNzU3RyCQELdmFsdWVPckVsc2UCCQCcCAIFDWNvbmZpZ0FkZHJlc3MFElNpZ25lclB1YmxpY0tleUtleQgFAnR4D3NlbmRlclB1YmxpY0tleQgFAnR4D3NlbmRlclB1YmxpY0tleQkAyBMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUJcHVibGljS2V5VcMOoA==" |
Check notice
Code scanning / Semgrep OSS
Semgrep Finding: generic.secrets.gitleaks.aws-access-token.aws-access-token Note test
No description provided.