This repository was archived by the owner on Nov 15, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
XCM v3 #4097
Merged
Merged
XCM v3 #4097
Changes from 250 commits
Commits
Show all changes
313 commits
Select commit
Hold shift + click to select a range
cd5df6d
cargo fmt
KiChjang 22b4332
Create benchmarks for XCM instructions introduced in v3 (#4564)
KiChjang c0d4800
XCM v3: Introduce querier field into `QueryReponse` (#4732)
gavofyork 79c6d55
Fixes
KiChjang a837427
Merge branch 'master' into gav-xcm-v3
gavofyork 87e5815
Fixes
KiChjang 2ccb1f4
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork 0dcdf44
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang e640d82
Add `starts_with` function to `MultiLocation` and `Junctions` (#4835)
apopiak fdf6352
Merge branch 'master' into gav-xcm-v3
gavofyork 6185cf3
XCM v3: Bridge infrastructure (#4681)
gavofyork 93382d9
Merge branch 'gav-xcm-v3' of github.com:paritytech/polkadot into gav-…
gavofyork 841bdb9
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 8e8e7b2
Merge branch 'gav-xcm-v3' of github.com:paritytech/polkadot into gav-…
gavofyork 2578af8
Bump Substrate
gavofyork 768535f
XCM v3: `ExchangeAsset` and Remote-locking (#4945)
gavofyork ba20a96
Merge branch 'gav-xcm-v3' of github.com:paritytech/polkadot into gav-…
gavofyork bc866e2
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork 42b12db
Add simulator test for remote locking
KiChjang 0fbf0c7
Fix tests
KiChjang adb6862
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork 6fda480
Bump
gavofyork 3d5ab32
XCM v3: Support for non-fungibles (#4950)
gavofyork c117f99
XCM v3: Context & ID hash (#4756)
gavofyork 76cad39
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 3026e89
Fixes
KiChjang 4c8ed73
Fixes
KiChjang 16b9de8
Fixes
KiChjang abdccdd
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 38fb089
Fixes
KiChjang ac9662c
Formatting
gavofyork 0f3c3ed
Fixes
gavofyork 59d3e17
Formatting
gavofyork 70c32d6
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork 7a1bc07
Fixes
gavofyork df62f3c
Fixes
gavofyork 5a916ca
Formatting
gavofyork 9cf0ff5
Formatting
gavofyork d236b2f
Remove horrible names
KiChjang edd992e
Bump
gavofyork 4421714
Remove InvertLocation trait (#5092)
gavofyork cb12467
Fixes
gavofyork 41e7c47
Remove XCMv1 (#5094)
gavofyork 2f214f2
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork 069c75f
derive serialize/deserialize for xcm primitives (#5036)
stanly-johnson 8723e31
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 55d09a5
Merge branch 'master' into gav-xcm-v3
gavofyork 9cca36a
Update lock
gavofyork bedb342
Fixes
gavofyork a261384
Add benchmarks for the ExchangeAsset instruction
KiChjang 39283ce
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 92a0d76
`AliasOrigin` instruction stub (#5122)
gavofyork 9de612c
Fixes
gavofyork 07cdc71
Merge branch 'master' into gav-xcm-v3
KiChjang 5e0d072
Update substrate
KiChjang 6d92833
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork f567ef4
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork 7f94156
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 0e27b18
Fixes
KiChjang 5c02901
Ensure same array length before using copy_from_slice
KiChjang f64a0b8
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 990a5d1
Fixes
KiChjang a1828ac
Add benchmarks for the UniversalOrigin instruction
KiChjang 7d05afd
Remove unused import
KiChjang e5052da
Remove unused import
KiChjang 70723a4
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 6632bff
Add benchmarks for SetFeesMode instruction
KiChjang 54e3eb6
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 865ee38
Add benchmarks for asset (un)locking instructions
KiChjang 774945c
Leave AliasOrigin unbenchmarked
KiChjang aca38aa
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 3425324
Fixes after merge
KiChjang c4a8da5
cargo fmt
KiChjang 81ec7d2
Fixes
KiChjang 325d469
Fixes
KiChjang 41a4b79
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang a8b2f7f
Set TrustedReserves to None on both Kusama and Westend
KiChjang 5a409eb
Remove extraneous reserve_asset_deposited benchmark
KiChjang 49cb4d7
Fix universal_origin benchmark
KiChjang 0f4fb16
Merge branch 'master' of https://github.com/paritytech/polkadot into …
784941b
cargo run --quiet --profile=production --features=runtime-benchmarks…
923acc8
Don't rely on skipped benchmark functions
KiChjang 5e53cf5
Fixes
KiChjang 94c76ce
cargo run --quiet --profile=production --features=runtime-benchmarks…
ae53f58
Fix unused variables
KiChjang 994ef9c
Merge branch 'master' into gav-xcm-v3
KiChjang cfcb797
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 34a969b
Fixes
KiChjang b63a68a
Spelling
KiChjang 6b28a4b
Fixes
KiChjang 99bf04d
Fix codec index of VersionedXcm
KiChjang 21a59c2
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 119a494
Allows to customize how calls are dispatched from XCM (#5657)
nanocryk 6810d06
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang b4f0aee
Update comment `NoteAssetLocked` -> `NoteUnlockable`
KiChjang 2608ec9
Merge branch 'master' into gav-xcm-v3
KiChjang 81b3068
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 7540583
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang dc5bb37
Fixes
KiChjang 29499ba
Fixes
KiChjang 6d2bae4
Adjust MultiAssets weights based on new wild card variants
KiChjang bf26e0d
Fixes
KiChjang c57e69b
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang e0d906a
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 4f5d45a
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 7bd9d5f
Fixes
KiChjang ecdea05
Fixes
KiChjang 64b2996
Fixes
KiChjang 3c21067
Fixes
KiChjang f895642
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 4c54eea
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
bkontur f073155
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
bkontur 1879039
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
bkontur 9c22a85
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork fbc4327
Some late fixes for XCMv3 (#5237)
gavofyork da5c4f2
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 37e49df
Update Substrate
KiChjang fa54983
Re-export `pub` stuff from universal_exports.rs + removed unecessary …
bkontur 9fc6b88
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
bkontur 41fb1f1
Use 2D weights in XCM v3 (#6134)
KiChjang 80f9d03
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang aef0231
Replace Weight::MAX with 100b weight units
KiChjang ca0aa37
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 55c8e69
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 2668b75
Add test to ensure all_gte in barriers is correct
KiChjang 6280d1d
Update xcm/src/v3/junction.rs
KiChjang 599158b
Add more weight tests
KiChjang 320a49f
Merge branch 'master' into gav-xcm-v3
KiChjang 7a99e39
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 6f0339c
cargo fmt
KiChjang c34826f
Create thread_local in XCM executor to limit recursion depth (#6304)
KiChjang 31d5410
Add upper limit on the number of overweight messages in the queue (#6…
KiChjang 8aef2b9
Introduce whitelist for Transact and limit UMP processing to 10 messa…
KiChjang 76ffe03
Update xcm/xcm-builder/src/universal_exports.rs
KiChjang 979c60a
Fixes
KiChjang 799ef59
Fixes
KiChjang 4d6b758
Remove topic register and instead use the topic field in XcmContext
KiChjang 07937f5
Derive some common traits for DispatchBlobError
KiChjang e428838
Fixes
KiChjang 83f2fd3
cargo fmt
KiChjang 57a9df8
Fixes
KiChjang e761a84
Fixes
KiChjang a374c9c
Fix comments
KiChjang 0801bc5
Fixes
KiChjang ded3655
Introduce WithOriginFilter and apply it as the CallDispatcher for run…
KiChjang c5e7908
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 5f8ffbb
Fixes
KiChjang dbb9ee7
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang f5fde97
Appease clippy and fixes
KiChjang 229bc00
Fixes
KiChjang 0987294
Fix more clippy issues
KiChjang 456ad93
Fixes
KiChjang 10f864b
Merge branch 'master' of https://github.com/paritytech/polkadot into …
d9ee95b
".git/.scripts/bench-bot.sh" runtime polkadot-dev pallet_xcm
59dea69
".git/.scripts/bench-bot.sh" runtime westend-dev pallet_xcm
67104c4
".git/.scripts/bench-bot.sh" runtime westend-dev pallet_xcm
f247313
Add benchmark function for ExportMessage
KiChjang 4b26181
Fix comment
KiChjang b00a892
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 947c4a9
Add upper limit to DownwardMessageQueues size
KiChjang e6f8cd7
Add max size check for queue in can_queue_downward_message
KiChjang 233d95a
Fixes
KiChjang 3b402dc
Make Transact runtime call configurable
KiChjang b1e6b47
Return Weight::MAX when there is no successful send XCM origin
KiChjang 09ecd7b
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang a6b0896
Update substrate
KiChjang 6128e3f
Fixes
KiChjang 07de17c
Fixes
KiChjang 65bffb8
Remove ExportMessage benchmark
KiChjang 843c8b0
Remove assertion on Transact instruction benchmark
KiChjang 8923c9f
Make reachable destination configurable in XCM pallet benchmarks
KiChjang c533401
Fixes
KiChjang 8a0398d
Fixes
KiChjang 8e74d79
Remove cfg attribute in fuzzer
KiChjang 5361832
Fixes
KiChjang a37b93a
Remove cfg attribute for XCM pallet in test runtime
KiChjang d9bfc89
Fixes
KiChjang 420be3e
Use ReachableDest where possible
KiChjang 1e3e9ad
Fixes
KiChjang 937c4b7
Add benchmark for UnpaidExecution
KiChjang d91adbc
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang fd388e0
Update substrate
KiChjang 7f437a5
Ensure benchmark functions pass filters
KiChjang 30a5760
Add runtime-benchmarks feature to fuzzer
KiChjang 5801648
Ensure FixedRateOfFungible accounts for proof size weights
KiChjang 15d7413
cargo fmt
KiChjang 1e0132d
Whitelist remark_with_event when runtime-benchmarks feature is enabled
KiChjang 8404147
Use remark_with_event for Transact benchmarks
KiChjang 06ad511
Merge branch 'master' into gav-xcm-v3
KiChjang aa02858
Fix Cargo.lock
KiChjang 30b2df3
Allow up to 3 DescendOrigin instructions before UnpaidExecution
KiChjang ceb0cd1
cargo fmt
KiChjang 77713e5
Edit code comment
KiChjang a08303e
Check check_origin for unpaid execution privilege
KiChjang 3e9cc17
Fixes
KiChjang 4b9a8e8
Small nits for xcm-v3 (#6408)
bkontur e13d926
Revert changes to UnpaidExecution
KiChjang 9f72f2c
Change AllowUnpaidExecutionFrom to be explicit
KiChjang c4a7569
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang ac9af6e
Fix log text
KiChjang 88d21b1
cargo fmt
KiChjang aea49b3
Add benchmarks for XCM pallet version migration (#6448)
KiChjang 0142d5c
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang a9a1a4f
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 79933a6
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 4ccf61a
Fixes
KiChjang 7218adf
Fix comments (#6470)
bkontur a76c17a
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 1020c2e
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 90822a7
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang f377a65
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang c223f71
Specify Ethereum networks by their chain id (#6286)
vgeddes 49b1999
Use for Kusama
gavofyork c795701
Merge branch 'gav-xcm-v3' of github.com:paritytech/polkadot into gav-…
gavofyork e3151f3
Use WithComputedOrigin for Polkadot, Rococo and Westend
KiChjang 186dcb8
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
gavofyork 7be5faf
Merge branches 'gav-xcm-v3' and 'gav-xcm-v3' of github.com:paritytech…
gavofyork 61074d1
Update lock
gavofyork bd8e768
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang 9d659fd
Merge remote-tracking branch 'origin/master' into gav-xcm-v3
KiChjang f1319f1
Fix warning
KiChjang b7e40d7
Merge branch 'master' into gav-xcm-v3
KiChjang 8652bfc
Update xcm/pallet-xcm/src/tests.rs
KiChjang f0b0847
Update runtime/parachains/src/ump/migration.rs
KiChjang e430f16
Update xcm/pallet-xcm/src/migration.rs
KiChjang 1efae03
Fixes
KiChjang b85e12f
cargo fmt
KiChjang dbbdc9d
Merge branch 'gav-xcm-v3' of github.com:paritytech/polkadot into gav-…
gavofyork 47f972b
Typo
gavofyork 62752b3
Update xcm/src/v3/mod.rs
gavofyork 3d0d3e7
Docs
gavofyork 97436d7
Merge branch 'gav-xcm-v3' of github.com:paritytech/polkadot into gav-…
gavofyork 9bc2ddb
Docs
gavofyork bbeb790
Docs
gavofyork 6c8fb23
Docs
gavofyork ff59e4c
Docs
gavofyork 76e6581
Update xcm/src/v3/multiasset.rs
KiChjang 6308804
Add tests for MultiAssets::from_sorted_and_deduplicated
KiChjang 88b187c
Fail gracefully when same instance NFTs are detected during push
KiChjang 0dc2643
Update Substrate to fix benchmarks
bkchr 40e0047
Apply suggestions from code review
gavofyork ceef029
Merge branch 'master' into gav-xcm-v3
shawntabrizi 5184e73
Update runtime/kusama/src/xcm_config.rs
KiChjang 1d76ac4
Rename arguments
KiChjang 8ef427d
Attempt to fix benchmark
KiChjang 9780e01
".git/.scripts/commands/bench/bench.sh" runtime polkadot-dev runtime_…
ae4a28a
Use actual weights for UMP pallet in Polkadot
KiChjang 1353932
".git/.scripts/commands/bench/bench.sh" runtime kusama-dev runtime_pa…
e80c142
".git/.scripts/commands/bench/bench.sh" runtime westend-dev runtime_p…
05dc8f0
".git/.scripts/commands/bench/bench.sh" runtime rococo-dev runtime_pa…
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -16,34 +16,71 @@ | |
|
|
||
| //! XCM sender for relay chain. | ||
|
|
||
| use frame_support::traits::Get; | ||
| use parity_scale_codec::Encode; | ||
| use runtime_parachains::{configuration, dmp}; | ||
| use sp_std::marker::PhantomData; | ||
| use xcm::latest::prelude::*; | ||
| use primitives::v2::Id as ParaId; | ||
| use runtime_parachains::{ | ||
| configuration::{self, HostConfiguration}, | ||
| dmp, | ||
| }; | ||
| use sp_std::{marker::PhantomData, prelude::*}; | ||
| use xcm::prelude::*; | ||
| use SendError::*; | ||
|
|
||
| pub trait PriceForParachainDelivery { | ||
| fn price_for_parachain_delivery(para: ParaId, message: &Xcm<()>) -> MultiAssets; | ||
| } | ||
| impl PriceForParachainDelivery for () { | ||
| fn price_for_parachain_delivery(_: ParaId, _: &Xcm<()>) -> MultiAssets { | ||
| MultiAssets::new() | ||
| } | ||
| } | ||
|
|
||
| pub struct ConstantPrice<T>(sp_std::marker::PhantomData<T>); | ||
| impl<T: Get<MultiAssets>> PriceForParachainDelivery for ConstantPrice<T> { | ||
| fn price_for_parachain_delivery(_: ParaId, _: &Xcm<()>) -> MultiAssets { | ||
| T::get() | ||
| } | ||
| } | ||
|
|
||
| /// XCM sender for relay chain. It only sends downward message. | ||
| pub struct ChildParachainRouter<T, W>(PhantomData<(T, W)>); | ||
| pub struct ChildParachainRouter<T, W, P>(PhantomData<(T, W, P)>); | ||
|
|
||
| impl<T: configuration::Config + dmp::Config, W: xcm::WrapVersion> SendXcm | ||
| for ChildParachainRouter<T, W> | ||
| impl<T: configuration::Config + dmp::Config, W: xcm::WrapVersion, P: PriceForParachainDelivery> | ||
| SendXcm for ChildParachainRouter<T, W, P> | ||
| { | ||
| fn send_xcm(dest: impl Into<MultiLocation>, msg: Xcm<()>) -> SendResult { | ||
| let dest = dest.into(); | ||
| match dest { | ||
| MultiLocation { parents: 0, interior: X1(Parachain(id)) } => { | ||
| // Downward message passing. | ||
| let versioned_xcm = | ||
| W::wrap_version(&dest, msg).map_err(|()| SendError::DestinationUnsupported)?; | ||
| let config = <configuration::Pallet<T>>::config(); | ||
| <dmp::Pallet<T>>::queue_downward_message( | ||
| &config, | ||
| id.into(), | ||
| versioned_xcm.encode(), | ||
| ) | ||
| .map_err(Into::<SendError>::into)?; | ||
| Ok(()) | ||
| }, | ||
| dest => Err(SendError::CannotReachDestination(dest, msg)), | ||
| } | ||
| type Ticket = (HostConfiguration<T::BlockNumber>, ParaId, Vec<u8>); | ||
|
|
||
| fn validate( | ||
| dest: &mut Option<MultiLocation>, | ||
| msg: &mut Option<Xcm<()>>, | ||
| ) -> SendResult<(HostConfiguration<T::BlockNumber>, ParaId, Vec<u8>)> { | ||
| let d = dest.take().ok_or(MissingArgument)?; | ||
| let id = if let MultiLocation { parents: 0, interior: X1(Parachain(id)) } = &d { | ||
| *id | ||
| } else { | ||
| *dest = Some(d); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I read both the trait definition and skimmed this code, but it is unclear to me why this is being mutated (i.e. why the function has side effects) despite returning an error.. |
||
| return Err(NotApplicable) | ||
| }; | ||
|
|
||
| // Downward message passing. | ||
| let xcm = msg.take().ok_or(MissingArgument)?; | ||
| let config = <configuration::Pallet<T>>::config(); | ||
KiChjang marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| let para = id.into(); | ||
| let price = P::price_for_parachain_delivery(para, &xcm); | ||
| let blob = W::wrap_version(&d, xcm).map_err(|()| DestinationUnsupported)?.encode(); | ||
| <dmp::Pallet<T>>::can_queue_downward_message(&config, ¶, &blob) | ||
| .map_err(Into::<SendError>::into)?; | ||
|
|
||
| Ok(((config, para, blob), price)) | ||
| } | ||
|
|
||
| fn deliver( | ||
| (config, para, blob): (HostConfiguration<T::BlockNumber>, ParaId, Vec<u8>), | ||
| ) -> Result<XcmHash, SendError> { | ||
| let hash = sp_io::hashing::blake2_256(&blob[..]); | ||
| <dmp::Pallet<T>>::queue_downward_message(&config, para, blob) | ||
| .map(|()| hash) | ||
| .map_err(|_| SendError::Transport(&"Error placing into DMP queue")) | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.